Я имею в виду использование c или c ++ lib. манипулировать. раньше я использую cairo lib, успешно создаю pdf файл, но без слоев. Теперь я хочу создать PDF-файл с несколькими слоями.
Спасибо
Вы можете создавать (также читать и редактировать) слои 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.
Других решений пока нет …