Hallo!
Meine Webanwendung läuft auf einem Tomcat-Server, wo ich eine PDF-Datei generieren möchte.
Ich arbeite mit iText und komme mit den OCGPropertys nicht zurecht.
Reader, Writer, Stmaper sind mir aber durch aus bekannt.
Ich habe eine PDF mit mehreren Schichten(Layern).
z.B. so eine PDF http://www.planetpdf.com/planetpdf/pdfs/House_Plan_Final.zip
Ich möchte aus dieser PDF eine neue PDF erzeugen, aber wo nur bestimmte Layer enthalten sind.
Es ist wichtig, dass die Layer in der neuen PDF physisch nicht mehr existieren.
Hat jemand einen Tipp oder evtl. Beispielcode wo man z.b. die Layerliste durchläuft und die nicht benötigen herauslöscht?
Wie kommt man an die Liste der Layer dran?
Methoden vom PDFLayer wie setOn(false), setOnPanel(false), setPrint(false), setView(false) sind nicht die richtigen dafür,
da die Layer noch physisch in der PDF enthalten sind und über Ebenenoptionen->Alle Layer angezeigt werden können, die dann schließlich auch gedruckt werden können.
Jetzt hab ich noch eine zweite Idee dieses zu realisieren.
Mit folgendem Code blende ich alle bis auf den letzten Layer aus.
Die ausgeblendeten Layer sind physisch noch da aber unsichtbar.
Soweit ganz gut.
Jetzt drucke ich diese PDF in eine neue PDF und siehe da, es kommt eine PDF nur mit dem einem Layer raus
Nun aber die Frage womit kann man aus einer PDF eine neue PDF erzeugen als ob sie als PDF gedruckt wurde.
Besten Dank im Voraus!
Meine Webanwendung läuft auf einem Tomcat-Server, wo ich eine PDF-Datei generieren möchte.
Ich arbeite mit iText und komme mit den OCGPropertys nicht zurecht.
Reader, Writer, Stmaper sind mir aber durch aus bekannt.
Ich habe eine PDF mit mehreren Schichten(Layern).
z.B. so eine PDF http://www.planetpdf.com/planetpdf/pdfs/House_Plan_Final.zip
Ich möchte aus dieser PDF eine neue PDF erzeugen, aber wo nur bestimmte Layer enthalten sind.
Es ist wichtig, dass die Layer in der neuen PDF physisch nicht mehr existieren.
Hat jemand einen Tipp oder evtl. Beispielcode wo man z.b. die Layerliste durchläuft und die nicht benötigen herauslöscht?
Wie kommt man an die Liste der Layer dran?
Methoden vom PDFLayer wie setOn(false), setOnPanel(false), setPrint(false), setView(false) sind nicht die richtigen dafür,
da die Layer noch physisch in der PDF enthalten sind und über Ebenenoptionen->Alle Layer angezeigt werden können, die dann schließlich auch gedruckt werden können.
Jetzt hab ich noch eine zweite Idee dieses zu realisieren.
Mit folgendem Code blende ich alle bis auf den letzten Layer aus.
Die ausgeblendeten Layer sind physisch noch da aber unsichtbar.
Soweit ganz gut.
Jetzt drucke ich diese PDF in eine neue PDF und siehe da, es kommt eine PDF nur mit dem einem Layer raus
Nun aber die Frage womit kann man aus einer PDF eine neue PDF erzeugen als ob sie als PDF gedruckt wurde.
Java:
try {
// (1) Einlesen der PDF-Vorlage
String pdf_vorlage = "c:\test.pdf";
PdfReader reader = new PdfReader(pdf_vorlage);
// (2) Ziel-PDF bestimmen
FileOutputStream out = new FileOutputStream(pdf_ziel);
PdfStamper stamper = new PdfStamper(reader, out);
pdf_writer = stamper.getWriter();
pdf_writer.setPdfVersion(PdfWriter.VERSION_1_5);
Collection cl = stamper.getPdfLayers().values();
Iterator it_cl = cl.iterator();
PdfLayer oPDFLayer = null;
while (it_cl.hasNext()) {
oPDFLayer = (PdfLayer) it_cl.next();
oPDFLayer.setOn(false); // Blendet Layer im PDF ein/aus
oPDFLayer.setOnPanel(false); // Blendet Layer im Acrobat-Panel ein/aus
oPDFLayer.setPrint("print", false); // Blendet Layer beim Drucken ein/aus
oPDFLayer.setView(false);
oPDFLayer.setExport(false);
if ( it_cl.hasNext() == false) {
oPDFLayer.setExport(true);
oPDFLayer.setOn(true);
oPDFLayer.setView(true);
sLayerName = oPDFLayer.get(PdfName.NAME).toString();
}
}
// (6) Dokumente schließen
stamper.close();
reader.close();
}
catch (DocumentException de) {
System.err.println(de.getMessage());
} catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
Besten Dank im Voraus!