Am 30.09.2021 um 16:26 schrieb Jochen Stärk:
Hi,
my library among others tries to convert from PDF/A-1 to A-3.
Now somebody reported
(https://github.com/ZUGFeRD/mustangproject/issues/249, includes sample
file) that errors are reported when validating the output but not when
reporting the input.
https://stackoverflow.com/questions/31209981/pdfbox-pdf-a-1a-to-pdf-a-3a
suggests to remove incomplete CIDsets using the following code
|private void removeCidSet(PDDocumentCatalog catalog) { COSName cidSet =
COSName.getPDFName("CIDSet"); // iterate over all pdf pages for (Object
object : catalog.getAllPages()) { if (object instanceof PDPage) { PDPage
page = (PDPage) object; Map<String, PDFont> fonts =
page.getResources().getFonts(); Iterator<String> iterator =
fonts.keySet().iterator(); // iterate over all fonts while
(iterator.hasNext()) { PDFont pdFont = fonts.get(iterator.next()); if
(pdFont instanceof PDType0Font) { PDType0Font typedFont = (PDType0Font)
pdFont; if (typedFont.getDescendantFont() instanceof PDCIDFontType2Font)
{ PDCIDFontType2Font f = (PDCIDFontType2Font)
typedFont.getDescendantFont(); PDFontDescriptor fontDescriptor =
f.getFontDescriptor(); if (fontDescriptor instanceof
PDFontDescriptorDictionary) { PDFontDescriptorDictionary fontDict =
(PDFontDescriptorDictionary) fontDescriptor;
fontDict.getCOSDictionary().removeItem(cidSet); } } } } } } } |
Is that the right approach?
Then my issue is I'm on PDFBox 2.0: How do I upgrade the three lines
starting with
|if (fontDescriptor instanceof PDFontDescriptorDictionary) { |
from PDFbox 1.8(?) to 2.0? Apparently PDFontDescriptorDictionary has
been removed and I can't find a replacement, my code looks like this
(and the strikethrough part will raise "cannot resolve" errors):
There isn't.
I don't see a "strikethrough" part.
You can remove an item like this:
pdObject.getCOSObject().removeItem(COSName.CID_SET)
Tilman
COSName cidSet = COSName.getPDFName("CIDSet"); // iterate over all pdf pages
for (Object object : doc.getPages()) {
if (object instanceof PDPage) {
PDPage page = (PDPage) object; PDResources res = page.getResources();
for (COSName fontName : res.getFontNames())
{
try {
PDFont pdFont = res.getFont(fontName); if (pdFont instanceof
PDType0Font) {
PDType0Font typedFont = (PDType0Font) pdFont; if
(typedFont.getDescendantFont() instanceof PDCIDFontType2) {
PDCIDFontType2 f = (PDCIDFontType2)
typedFont.getDescendantFont(); PDFontDescriptor fontDescriptor =
pdFont.getFontDescriptor(); if (fontDescriptor instanceof
PDFontDescriptorDictionary)
{PDFontDescriptorDictionary fontDict = (PDFontDescriptorDictionary)
fontDescriptor; fontDict.getCOSDictionary().removeItem(cidSet); }
}
}
} catch (IOException e) {
e.printStackTrace(); }
// do stuff with the font }
}
}
Thanks and kind regards
Jochen
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org