PDFClown не может редактировать созданный PDF - PullRequest
0 голосов
/ 11 января 2019

Я использую PDF Clown (в C #) для создания PDF-файла, содержащего графику (линии, многоугольники и круги) на отдельных слоях. Теперь я столкнулся с проблемой и искал в Интернете несколько дней, но не могу найти решение.

У меня следующая проблема: Как я могу убедиться, что PDF-файл, созданный PDFClown, можно редактировать / изменять с помощью другого приложения, например Blue Beam или Adobe Acrobat? На данный момент сгенерированный PDF выглядит нормально, но я не могу выбрать и изменить любую графику (линии, многоугольники и т. Д.) На любом слое.

Должен ли я установить что-то во время создания слоев или графических объектов?

Ссылка на созданный файл: https://drive.google.com/open?id=1om4UByGhfS1D9OOCYzhHrNjNQeNcJI-0

Буду очень признателен за вашу помощь! Ниже приведен фрагмент кода, в котором создается ломаная линия.

var pdfFile = new File();

m_PdfDocument = pdfFile.Document;
m_PdfDocument.PageSize = PageFormat.GetSize(PageFormat.SizeEnum.A4);
m_PdfDocument.Version = Version.Get("1.6");


m_PdfPage = new Page(m_PdfDocument);
m_PdfDocument.Pages.Add(m_PdfPage);

var primitiveComposer = new PrimitiveComposer(m_PdfPage);

primitiveComposer.SetLineJoin(LineJoinEnum.Miter);
primitiveComposer.SetLineCap(LineCapEnum.Square);
primitiveComposer.SetLineWidth(2);

primitiveComposer.SetStrokeColor(DeviceRGBColor.Get(System.Drawing.Color.Black))
// Flip Y axis!
primitiveComposer.SetMatrix(1, 0, 0, -1, 0, m_PdfPage.Size.Height);

primitiveComposer.BeginLayer(layer);
primitiveComposer.DrawPolyline(line.ToArray());
primitiveComposer.Stroke();
primitiveComposer.End();

primitiveComposer.Flush();

pdfFile.Save(filename, SerializationModeEnum.Standard);

Edit2: новый тестовый файл https://drive.google.com/open?id=1PHACkr2EcWrdIP5XocCnwDtakQ-P0hJY

Изменить 18-01-2019 В Bluebeam Revu запись ломаной линии выглядит следующим образом:

%PDF-1.5
%Çì¢
1 0 obj<</CreationDate(D:20190111132455+01'00')/ModDate(D:20190111132818+01'00')/Aut
hor(e.debont)/Creator(Bluebeam Revu x64)/Producer(Bluebeam PDF Library 18)>>
endobj
2 0 obj<</Type/Catalog/Pages 3 0 R/OCProperties 7 0 R>>
endobj
3 0 obj<</Type/Pages/Kids[4 0 R]/Count 1>>
endobj
4 0 obj<</Type/Pages/Kids[5 0 R]/Count 1/Parent 3 0 R>>
endobj
5 0 obj<</Type/Page/Parent 4 0 R/MediaBox[0 0 594.72 841.68]/Annots 19 0 R>>
endobj
6 0 obj<</Order[8 0 R]>>
endobj
7 0 obj<</OCGs[8 0 R]/D 6 0 R>>
endobj
8 0 obj<</Type/OCG/Name(Test)>>
endobj
19 0 obj[21 0 R]
endobj
21 0 obj<</Subj(Polylijn)/Type/Annot/P 5 0 R/F 4/C[1 0 0]/CreationDate
(D:20190111132642+01'00')/T(e.debont)/Subtype/PolyLine/AP<</N
22 0 R>>/IC[1 0 0]/M(D:20190111132642+01'00')/Vertices[225.8323 629.0071 
273.3759 657.8729 354.8793 583.5859]/Rect[220.3323 578.0859 360.3793 
663.3729]/NM(MQJCWGUIXHEAEWJU)/OC 8 0 R>>
endobj
22 0 obj<</Type/XObject/Subtype/Form/FormType 1/BBox[220.3323 578.0859 
360.3793 663.3729]/Resources<</ProcSet[/PDF]>>/Matrix[1 0 0 1 -220.3323 
-578.0859]/Length 84>>
stream
1 0 0 RG 1 0 0 rg 1 w 225.8323 629.0071 m 273.3759 657.8729 l 354.8793 
583.5859 l S 
endstream
endobj
xref
0 23
0000000000 65535 f 
0000000015 00000 n 
0000000183 00000 n 
0000000246 00000 n 
0000000296 00000 n 
0000000359 00000 n 
0000000443 00000 n 
0000000475 00000 n 
0000000514 00000 n 
0000000000 65535 f 
0000000000 65535 f 
0000000000 65535 f 
0000000000 65535 f 
0000000000 65535 f 
0000000000 65535 f 
0000000000 65535 f 
0000000000 65535 f 
0000000000 65535 f 
0000000000 65535 f 
0000000553 00000 n 
0000000000 65535 f 
0000000577 00000 n 
0000000900 00000 n 
trailer<</Size 23/Info 1 0 R/ID[<2753c66a6950982e644007ca4324fe83> 
<2753c66a6950982e644007ca4324fe83>]/Root 2 0 R>>
startxref
1175
%%EOF

PDFClown генерирует это (между потоком и конечным потоком есть двоичные данные):

9 0 obj
<</Filter /FlateDecode /Length 60 >>
stream
Binary data
endstream
endobj
10 0 obj
<</Type /OCMD /P /AllOn /OCGs [8 0 R ] >>
endobj
11 0 obj
<</Type /XObject /Subtype /Form /BBox [0 0 594.71997 841.67999 ] /Resources 
<</Properties <</1 10 0 R >> >> /Filter /FlateDecode /Length 60 >>
stream
Binary data
endstream
endobj

Как мне с помощью PDFClown записать вывод Bluebeam? Или, по крайней мере, как я могу предотвратить использование / Filter / FlateDecode?

1 Ответ

0 голосов
/ 21 января 2019

Приведенный пример содержимого PDF указывает, что тип линейной графики, которую может редактировать целевое программное обеспечение для редактирования PDF, - это не пути на странице содержимое , а вместо этого PolyLine аннотации .

Вы можете создать простую PolyLine аннотацию с PDF Clown следующим образом:

org.pdfclown.files.File file = new org.pdfclown.files.File();
Document document = file.Document;
Page page = new Page(document);
document.Pages.Add(page);

new Polyline(page, page.Box, "Test-PolyLine")
{
    Color = new DeviceRGBColor(1, 0, 0),
    Vertices = new List<PointF>() { new PointF(50, 50), new PointF(50, 250), new PointF(150, 150), new PointF(250, 250), new PointF(250, 50) }
};

file.Save("PolyLine-PdfClown.pdf", SerializationModeEnum.Standard);

Результат в Adobe Reader:

screen shot

...