Как создать PDF-файл, содержащий разные слои

Я имею в виду использование c или c ++ lib. манипулировать. раньше я использую cairo lib, успешно создаю pdf файл, но без слоев. Теперь я хочу создать PDF-файл с несколькими слоями.

Спасибо

3

Решение

Вы можете создавать (также читать и редактировать) слои PDF (также знать дополнительные группы содержимого), как показано в PDFLayers образец, который также включен как часть PDFNet SDK.

Ниже приведен соответствующий код:

    PDFNet.Initialize();
PDFDoc doc;

// Create three layers...
OCG::Group image_layer = CreateLayer(doc, "Image Layer");
OCG::Group text_layer = CreateLayer(doc, "Text Layer");
OCG::Group vector_layer = CreateLayer(doc, "Vector Layer");

// Start a new page ------------------------------------
Page page = doc.PageCreate();

ElementBuilder builder; // ElementBuilder is used to build new Element objects
ElementWriter writer;   // ElementWriter is used to write Elements to the page
writer.Begin(page);     // Begin writing to the page

// Add new content to the page and associate it with one of the layers.
Element element = builder.CreateForm(CreateGroup1(doc, image_layer.GetSDFObj()));
writer.WriteElement(element);

element = builder.CreateForm(CreateGroup2(doc, vector_layer.GetSDFObj()));
writer.WriteElement(element);

// Add the text layer to the page...
if (false)  // set to true to enable 'ocmd' example.
{
// A bit more advanced example of how to create an OCMD text layer that
// is visible only if text, image and path layers are all 'ON'.
// An example of how to set 'Visibility Policy' in OCMD.
Obj ocgs = doc.CreateIndirectArray();
ocgs.PushBack(image_layer.GetSDFObj());
ocgs.PushBack(vector_layer.GetSDFObj());
ocgs.PushBack(text_layer.GetSDFObj());
OCG::OCMD text_ocmd = OCG::OCMD::Create(doc, ocgs, OCG::OCMD::e_AllOn);
element = builder.CreateForm(CreateGroup3(doc, text_ocmd.GetSDFObj()));
}
else {
element = builder.CreateForm(CreateGroup3(doc, text_layer.GetSDFObj()));
}
writer.WriteElement(element);

// Add some content to the page that does not belong to any layer...
// In this case this is a rectangle representing the page border.
element = builder.CreateRect(0, 0, page.GetPageWidth(), page.GetPageHeight());
element.SetPathFill(false);
element.SetPathStroke(true);
element.GetGState().SetLineWidth(40);
writer.WriteElement(element);

writer.End();  // save changes to the current page
doc.PagePushBack(page);

// Set the default viewing preference to display 'Layer' tab.
PDFDocViewPrefs prefs = doc.GetViewPrefs();
prefs.SetPageMode(PDFDocViewPrefs::e_UseOC);

doc.Save("my.pdf", SDFDoc::e_linearized, 0);

Примечание: я разработчик PDFNet.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]