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

Reply via email to