diff --git a/pdf.c b/pdf.c
index ce2d4ed3ea9ed8fcb626da4f554acf82ee804742..5c8dc7f6589060062ef1cb4c878790c455c1328c 100644
--- a/pdf.c
+++ b/pdf.c
@@ -237,6 +237,23 @@ act_ahextruncated(const HParseResult *p, void *u)
 	return H_MAKE_UINT(b);
 }
 
+HParsedToken *
+act_a85zero(const HParseResult *p, void *u)
+{
+	uint8_t nybble = 0;
+	/* Remember, this only represents 4 bytes. */
+	return H_MAKE_UINT(nybble);
+}
+
+HParsedToken *
+act_a85digit(const HParseResult *p void *u)
+{
+	uint8_t nybble = H_CAST_UINT(p->ast);
+	nybble -= '!';
+
+	return H_MAKE_UINT(nybble);
+}
+
 HParsedToken *
 act_nat(const HParseResult *p, void *u)
 {
@@ -1097,8 +1114,10 @@ ASCII85Decode(const Dict *parms, HBytes b, HParser *p)
 {
 	HParseResult *res;
 	H_RULE(lwchar,	IN(LWCHARS));
-	
+
 	H_RULE(a85eod,	SEQ(h_ch('~'), OPT(h_many(lwchar)), h_ch('>')));
+	H_ARULE(a85zero,	h_ch('z'));
+
 	fprintf(stderr, "ASCII85Decode: not implemented\n");
 	return NULL;
 }