View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0016068 | Scribus | public | 2020-03-19 07:01 | 2020-04-05 19:37 | |
Reporter | Pontobart | Assigned To | jghali | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Product Version | 1.5.6.svn | ||||
Fixed in Version | 1.5.6.svn | ||||
Summary | 0016068: PDF analyzer fails on dash pattern and type0 fonts | ||||
Description | The d operator has the form "dashArray dashPhase". For the tf operator with Type0 fonts the DescendantFonts key points to an array holding one reference to the descendant font. One has to resolve the reference and not use it directly. Example from a PDF file: /Type /Font /BaseFont /ABCDEE+FontName /DescendantFonts 15 0 R /Encoding /Identity-H /Subtype /Type0 /ToUnicode 21 0 R >> endobj 15 0 obj [ 16 0 R ] endobj 16 0 obj << /Type /Font /BaseFont /ABCDEE+FontName /CIDSystemInfo 17 0 R /CIDToGIDMap /Identity /DW 1000 /FontDescriptor 18 0 R /Subtype /CIDFontType2 /W 20 0 R >> | ||||
Tags | No tags attached. | ||||
Patch | No | ||||
|
pdf_analyze_errors_pattern_type0_fonts.diff (1,368 bytes)
Index: scribus/pdf_analyzer.cpp =================================================================== --- scribus/pdf_analyzer.cpp (Revision 23509) +++ scribus/pdf_analyzer.cpp (Arbeitskopie) @@ -278,7 +279,7 @@ PdfArray dashArr = args[0].GetArray(); for (uint i=0; i<dashArr.size(); ++i) currGS.dashPattern.first.append(dashArr[i].GetNumber()); - currGS.dashPattern.second = args[0].GetNumber(); + currGS.dashPattern.second = args[1].GetNumber(); } break; case KW_g: @@ -780,10 +781,10 @@ PdfObject* descendantFonts = fontObj->GetIndirectKey("DescendantFonts"); if (descendantFonts && descendantFonts->IsArray()) { - PdfObject descendantFont = descendantFonts->GetArray()[0]; - descendantFont.SetOwner(descendantFonts->GetOwner()); - PdfObject* subtypeDescFont = descendantFont.GetIndirectKey("Subtype"); - fontDesc = descendantFont.MustGetIndirectKey("FontDescriptor"); + PdfReference refDescFont = descendantFonts->GetArray()[0].GetReference(); + PdfObject* descendantFont = descendantFonts->GetOwner()->GetObject(refDescFont); + PdfObject* subtypeDescFont = descendantFont->GetIndirectKey("Subtype"); + fontDesc = descendantFont->MustGetIndirectKey("FontDescriptor"); if (subtypeDescFont && subtypeDescFont->IsName()) { if (subtypeDescFont->GetName() == "CIDFontType0") |
|
I've applied your patch, thanks! |
Date Modified | Username | Field | Change |
---|---|---|---|
2020-03-19 07:01 | Pontobart | New Issue | |
2020-03-19 07:01 | Pontobart | File Added: pdf_analyze_errors_pattern_type0_fonts.diff | |
2020-03-19 09:55 | jghali | Assigned To | => jghali |
2020-03-19 09:55 | jghali | Status | new => resolved |
2020-03-19 09:55 | jghali | Resolution | open => fixed |
2020-03-19 09:55 | jghali | Fixed in Version | => 1.5.6.svn |
2020-03-19 09:55 | jghali | Note Added: 0047442 | |
2020-04-05 19:37 | cbradney | Status | resolved => closed |