【问题标题】:How to draw vertical gradient in iTextSharp?如何在 iTextSharp 中绘制垂直渐变?
【发布时间】:2015-12-23 10:24:11
【问题描述】:

我正在尝试在 iTextSharp pdf 文档的底部绘制垂直渐变:

PdfShading shading 
    = PdfShading.SimpleAxial(pdfWriter, 0, document.PageSize.Height, 
                             document.PageSize.Width, 0, BaseColor.WHITE, BaseColor.GREEN);
PdfShadingPattern pattern = new PdfShadingPattern(shading);
pdfContentByte.SetShadingFill(pattern);
pdfContentByte.Rectangle(0, 0, document.PageSize.Width, 70);
pdfContentByte.Fill();

这会在我想要创建的确切位置创建渐变,但渐变是从左(白色)到右(绿色)的水平方向。

我希望渐变从顶部(白色)到底部(绿色)是垂直的。

像这里(Does iTextsharp support multi color diagonal gradients?)那样修改坐标并没有解决问题。我也尝试旋转文档,但效果不佳。

【问题讨论】:

    标签: c# itext gradient


    【解决方案1】:

    您使用了错误的坐标。在 Java 中,你需要这样的东西:

    public void createPdf(String dest) throws IOException, DocumentException {
        Rectangle pageSize = new Rectangle(150, 300);
        Document document = new Document(pageSize);
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
        document.open();
        PdfShading shading = PdfShading.simpleAxial(writer,
                0, pageSize.getHeight(),
                0, 0,
                BaseColor.WHITE, BaseColor.GREEN);
        PdfShadingPattern pattern = new PdfShadingPattern(shading);
        PdfContentByte canvas = writer.getDirectContent();
        canvas.setShadingFill(pattern);
        canvas.rectangle(0, 0, pageSize.getWidth(), pageSize.getHeight());
        canvas.fill();
        document.close();
    }
    

    完整示例代码请参见GradientTopToBottom

    你看出区别了吗?

    • 您从左上角 (0, document.PageSize.Height) 转到右下角 (document.PageSize.Width, 0)。那是对角线。
    • 您想从顶部 (0, document.PageSize.Height) 到底部 (0, 0) 导致以下结果:gradient_top_to_bottom.pdf

    【讨论】:

    • 知道了。非常感谢你。需要在不使用全高的情况下进行细微的改变......但无论如何就是这样。
    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多