Я использую mupdf(git clone at commit 2014/3/5 4:05) для подписи pdf.
И мне уже удалось подписать цифровую подпись в pdf с помощью функции 'pdf_sign_signature'.
Теперь я пытаюсь вставить изображение в слой n2 этой подписи, когда подписываю ее.
В '/source/pdf/pdf-appearance' есть функция 'pdf_set_signature_appearance'. c'.
Я пытаюсь добавить код ниже, чтобы вставить изображение:
image_doc = (image_document *)fz_open_document(ctx, jpgFilePathAndName);
fz_fill_image(dev, image_doc->image, page_ctm, 1.0f);
эти коды вставляются между:
rect = annot->rect;
rect.x0 = (rect.x0 + rect.x1)/2.0f;
text = fit_text(ctx, &font_rec, (char *)bufstr, &rect);
fz_fill_text(dev, text, page_ctm, cs, font_rec.da_rec.col, 1.0f);
а также
rect = annot->rect;
fz_transform_rect(&rect, page_ctm);
pdf_set_annot_appearance(doc, annot, &rect, dlist);
После выполнения у меня получился вот такой pdf-файл:
%PDF-1.4
%μῦ
1 0 obj
<<
/Type /Font
/BaseFont /Helvetica
/Subtype /Type1
/Encoding /WinAnsiEncoding
>>
endobj
2 0 obj
<<
/Length 63
>>
stream
q
BT
36 806 Td
0 -18 Td
/F1 12 Tf
(Hello World!)Tj
0 0 Td
ET
Q
endstream
endobj
3 0 obj
<<
/Count 1
/Type /Pages
/ITXT (5.3.0)
/Kids [ 4 0 R ]
>>
endobj
4 0 obj
<<
/Annots 10 0 R
/Contents 2 0 R
/MediaBox [ 0 0 595 842 ]
/Parent 3 0 R
/Resources <<
/Font <<
/F1 1 0 R
>>
/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>>
/Type /Page
>>
endobj
5 0 obj
<<
/AcroForm 8 0 R
/Metadata 9 0 R
/Pages 3 0 R
/Type /Catalog
>>
endobj
6 0 obj
<<
/CreationDate (D:20120620091727+02'00')
/ModDate (D:20120804153425+02'00')
/Producer (iText\256 5.3.0 \2512000-2012 1T3XT BVBA)
>>
endobj
7 0 obj
<<
/AP <<
/N 17 0 R
>>
/DA (/Helv 0 Tf 0 g)
/F 4
/FT /Sig
/MK <<
>>
/P 4 0 R
/Rect [ 41.3670998 713.710022 237.352997 781.257996 ]
/Subtype /Widget
/T (Signature1)
/Type /Annot
/V 15 0 R
>>
endobj
8 0 obj
<<
/DA (/Helv 0 Tf 0 g )
/DR <<
/Encoding <<
/PDFDocEncoding 14 0 R
>>
/Font <<
/Helv 12 0 R
/ZaDb 13 0 R
>>
/XObject <<
/DSz 11 0 R
>>
>>
/Fields [ 7 0 R ]
/SigFlags 1
>>
endobj
9 0 obj
<<
/Length 3304
/Subtype /XML
/Type /Metadata
>>
stream
<?xpacket begin="Ôªø" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:08:04 ">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/">
<xmp:CreateDate>2012-06-20T09:17:27+02:00</xmp:CreateDate>
<xmp:ModifyDate>2012-08-04T15:34:25+02:00</xmp:ModifyDate>
<xmp:MetadataDate>2012-08-04T15:34:25+02:00</xmp:MetadataDate>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
<pdf:Producer>iText® 5.3.0 ©2000-2012 1T3XT BVBA</pdf:Producer>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:format>application/pdf</dc:format>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
<xmpMM:DocumentID>uuid:547fb234-f327-4f3d-8dd1-7b7ea87df336</xmpMM:DocumentID>
<xmpMM:InstanceID>uuid:72437fbf-7b45-4062-98f1-2b53d3ad86d0</xmpMM:InstanceID>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>endstream
endobj
10 0 obj
[ 7 0 R ]
endobj
11 0 obj
<<
/BBox [ 41.3670998 713.710022 237.352997 781.257996 ]
/Length 67
/Resources <<
/XObject <<
/Img0 16 0 R
>>
>>
/Subtype /Form
/Type /XObject
/Matrix [ 1 0 0 1 0 0 ]
>>
stream
1.000000 0.000000 0.000000 -1.000000 0.000000 1.000000 cm
/Img0 Do
endstream
endobj
12 0 obj
<<
/BaseFont /Helvetica
/Encoding 14 0 R
/Name /Helv
/Subtype /Type1
/Type /Font
>>
endobj
13 0 obj
<<
/BaseFont /ZapfDingbats
/Name /ZaDb
/Subtype /Type1
/Type /Font
>>
endobj
14 0 obj
<<
/Differences [ 24 /breve /caron /circumflex /dotaccent /hungarumlaut
/ogonek /ring /tilde 39 /quotesingle 96 /grave 128 /bullet
/dagger /daggerdbl /ellipsis /emdash /endash /florin /fraction
/guilsinglleft /guilsinglright /minus /perthousand /quotedblbase
/quotedblleft /quotedblright /quoteleft /quoteright /quotesinglbase
/trademark /fi /fl /Lslash /OE /Scaron /Ydieresis /Zcaron
/dotlessi /lslash /oe /scaron /zcaron 160 /Euro 164 /currency
166 /brokenbar 168 /dieresis /copyright /ordfeminine 172
/logicalnot /.notdef /registered /macron /degree /plusminus
/twosuperior /threesuperior /acute /mu 183 /periodcentered
/cedilla /onesuperior /ordmasculine 188 /onequarter /onehalf
/threequarters 192 /Agrave /Aacute /Acircumflex /Atilde /Adieresis
/Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis
/Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve
/Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash
/Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
/agrave /aacute /acircumflex /atilde /adieresis /aring /ae
/ccedilla /egrave /eacute /ecircumflex /edieresis /igrave
/iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute
/ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute
/ucircumflex /udieresis /yacute /thorn /ydieresis ]
/Type /Encoding
>>
endobj
15 0 obj
<<
/ByteRange[0 6712 10814 12756] /Contents
...
/Filter /Adobe.PPKLite
/SubFilter /adbe.pkcs7.detached
>>
endobj
16 0 obj
<<
/Type /XObject
/Subtype /Image
/Width 400
/Height 332
/ColorSpace /DeviceRGB
/BitsPerComponent 8
/Length 11097
>>
stream
...
endstream
endobj
17 0 obj
<<
/BBox [ 41.3670998 713.710022 237.352997 781.257996 ]
/FormType 1
/Length 7
/Matrix [ 1 0 0 1 0 0 ]
/Resources <<
/ProcSet [ /PDF /Text ]
/XObject <<
/FRM 18 0 R
>>
>>
/Subtype /Form
/Type /XObject
>>
stream
/FRM Doendstream
endobj
18 0 obj
<<
/BBox [ 41.3670998 713.710022 237.352997 781.257996 ]
/FormType 1
/Length 51
/Matrix [ 1 0 0 1 0 0 ]
/Resources <<
/ProcSet [ /PDF /Text ]
/XObject <<
/n0 19 0 R
/n2 11 0 R
>>
>>
/Subtype /Form
/Type /XObject
>>
stream
q 1 0 0 1 0 0 cm /n0 Do Q q 1 0 0 1 0 0 cm /n2 Do Qendstream
endobj
19 0 obj
<<
/BBox [ 41.3670998 713.710022 237.352997 781.257996 ]
/FormType 1
/Length 9
/Matrix [ 1 0 0 1 0 0 ]
/Resources <<
/ProcSet [ /PDF /Text ]
>>
/Subtype /Form
/Type /XObject
>>
stream
% DSBlankendstream
endobj
xref
0 20
0000000000 65536 f
0000000017 00000 n
0000000123 00000 n
0000000238 00000 n
0000000320 00000 n
0000000544 00000 n
0000000634 00000 n
0000000790 00000 n
0000001026 00000 n
0000001272 00000 n
0000004664 00000 n
0000004691 00000 n
0000004990 00000 n
0000005101 00000 n
0000005196 00000 n
0000006628 00000 n
0000010882 00000 n
0000022144 00000 n
0000022423 00000 n
0000022763 00000 n
trailer
<<
/Size 20
/Info 6 0 R
/Root 5 0 R
/ID [ <D0151A7ADF2410CF3E72A04B9CB83452> <FA2030FCC5A66742887F23E51DEC5875> ]
>>
startxref
23003
%%EOF
Это кажется правильным, так как /n2 11 0 R в 18 0 obj и /Img0 16 0 R в 11 0 obj и 16 0 obj выглядит как правильно сформированный объект Image XObject.
Но изображение не отображается, когда я использую программу чтения PDF для открытия этого файла PDF.< br>
Кто-нибудь может подсказать, что не так с этим pdf-файлом и как правильно вставить изображение.
Большое спасибо.
ps.
signed_with_image_only.pdf
signed_with_text_and_image.pdf
signed_with_image_only.pdf — это pdf-файл, в который я добавил '\n' перед 'endstream'. Вы можете видеть, что изображение не отображается в форме, расположенной ниже «Hello World!».
signed_with_text_and_image.pdf почти такой же, как signed_with_image_only.pdf< /strong>, но я поместил текст в слой n2, чтобы показать вам, что вставка текста в порядке. Такое же изображение тоже вставлено, и оно тоже не появилось.
/FRM Doendstream
. Должен быть разделитель после Do, чтобы распознать его, и разрыв строки перед endstream, чтобы корректно завершить поток. Это также верно для объектов 9 (<?xpacket end="w"?>endstream
), 18 (Qendstream
) и 19 (DSBlankendstream
). Тем не менее, использование таких слоев, как n2 в подписях PDF, устарело много лет назад. - person mkl   schedule 11.03.2014/Contents 308207fa06092a...
: в начале содержимого отсутствует открывающая скобка<
. - person mkl   schedule 12.03.2014<
, вы, по крайней мере, увидите текст в случае подписанного_с_текстом_и_изображением.pdf. Однако изображения вы не увидите. Во-первых, изображение, расположенное через1.000000 0.000000 0.000000 -1.000000 0.000000 1.000000 cm
, выходит за пределы ограничивающей рамки41.3670998 713.710022 237.352997 781.257996
. Но я предполагаю, что данные изображения также подозрительны. Я не в графических форматах, хотя... - person mkl   schedule 12.03.20140.000000 1.000000
) по существу обозначают позицию, которая находится далеко за пределами ограничивающей рамки, а-1.000000
перед ними, по сути, означает зеркальное отображение координаты y. - person mkl   schedule 13.03.2014