[ 
https://issues.apache.org/jira/browse/FOP-2273?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13707010#comment-13707010
 ] 

Max Gilead commented on FOP-2273:
---------------------------------

There should be two lines but Acrobat Reader shows only one. There is no error 
described above as I couldn't get it to display one with this simple example 
(the original PDF was generated using a 3rd party library).

import org.apache.fop.svg.PDFDocumentGraphics2D;
import org.apache.pdfbox.pdfwriter.COSWriter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.xmlgraphics.java2d.GraphicContext;

import java.awt.BasicStroke;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class FopTest {

    public static void main(String[] args) throws Exception {
        final String[] content = new String[1];
        PDFDocumentGraphics2D g = new PDFDocumentGraphics2D(false, new 
ByteArrayOutputStream(), 100, 100) {
            @Override protected void closePage() {
                content[0] = super.getString() + "Q\n";
                super.closePage();
            }
        };
        g.setGraphicContext(new GraphicContext());

        g.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_ROUND, 
BasicStroke.JOIN_ROUND, 1.0f));
        g.drawLine(0, 100, 100, 0);
        g.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_ROUND, 
BasicStroke.JOIN_ROUND, 0.1f));
        g.drawLine(0, 0, 100, 100);

        g.finish();
        g.dispose();

        final PDDocument document = new PDDocument();
        PDPage page = new PDPage(new PDRectangle(100, 100));
        document.addPage(page);
        PDPageContentStream writer = new PDPageContentStream(document, page);
        writer.appendRawCommands(content[0].getBytes());
        writer.close();

        OutputStream out = new BufferedOutputStream(new 
FileOutputStream("FOP_Test.pdf"));
        COSWriter coswriter = null;
        coswriter = new COSWriter(out);
        coswriter.write(document);
        coswriter.close();

        document.close();
        out.close();
    }

}

                
> Stroke miter limit is not clamped when writing PDFs
> ---------------------------------------------------
>
>                 Key: FOP-2273
>                 URL: https://issues.apache.org/jira/browse/FOP-2273
>             Project: Fop
>          Issue Type: Bug
>          Components: pdf
>    Affects Versions: trunk
>            Reporter: Max Gilead
>              Labels: easyfix
>
> org.apache.fop.svg.PDFGraphics2D line 1240 (as of SVN revision 148001 [1]) is:
> float ml = bs.getMiterLimit();
> but should be (or equivalent):
> float ml = Math.max(1.0f, bs.getMiterLimit());
> Acrobat Reader (on all platforms) refuses to load graphics data after 
> encountering miter limit < 1.0 and reports an error.
> I can't find a reference to the valid range in the PDF spec but Inkscape also 
> had a problem with values less than 1.0 [2] and SVG spec mandates values >= 
> 1.0 as well [3] so clamping the value to 1.0 or more seems like the right 
> thing to do.
> [1] 
> http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/svg/PDFGraphics2D.java?revision=1480018&view=markup
> [2] 
> http://webcache.googleusercontent.com/search?q=cache:RHSt5Wk7-uQJ:inkscape-forum.andreas-s.net/topic/71990+&cd=7&hl=en&ct=clnk&gl=uk&client=firefox-beta
> [3] http://www.w3.org/TR/SVG11/painting.html#StrokeMiterlimitProperty

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to