Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 使用ABCpdf向生成的PDF添加水印_Html_Css_Vb.net_Pdf_Abcpdf - Fatal编程技术网

Html 使用ABCpdf向生成的PDF添加水印

Html 使用ABCpdf向生成的PDF添加水印,html,css,vb.net,pdf,abcpdf,Html,Css,Vb.net,Pdf,Abcpdf,我试图在使用HTML/CSS生成的PDF上添加水印。我最初的方法是创建一个页面大小的透明PNG,并将该图像覆盖在生成文档的每页顶部。由于ABCPDF不认为PNG是一个合适的图像文件,所以我将PNG加载为XFIX并保存透明度。但是,图像仍然在格式化的HTML/CSS层上显示为不透明 Private Shared _watermark As Byte() Private Shared ReadOnly Property Watermark() As Byte() Ge

我试图在使用HTML/CSS生成的PDF上添加水印。我最初的方法是创建一个页面大小的透明PNG,并将该图像覆盖在生成文档的每页顶部。由于ABCPDF不认为PNG是一个合适的图像文件,所以我将PNG加载为XFIX并保存透明度。但是,图像仍然在格式化的HTML/CSS层上显示为不透明

    Private Shared _watermark As Byte()
    Private Shared ReadOnly Property Watermark() As Byte()
        Get
            If _watermark Is Nothing Then
                Using memoryStream As New MemoryStream()
                    My.Resources.watermark.Save(memoryStream, Imaging.ImageFormat.Png)

                    _watermark = memoryStream.ToArray()
                End Using
            End If

            Return _watermark
        End Get
    End Property

Private Function CreatePreviewPdf(html As String) As Byte()
        Dim generatedStream = New MemoryStream()

        Using pdfDoc = New Doc()
            pdfDoc.HtmlOptions.Engine = EngineType.Gecko
            pdfDoc.Rect.Inset(25, 25)
            'Adds a margin
            pdfDoc.Page = pdfDoc.AddPage()

            Dim options As New XReadOptions
            options.PreserveTransparency = True
            Dim imgwater = XImage.FromData(Watermark, options)

            Dim id = pdfDoc.AddImageHtml(html)
            While True
                If Not pdfDoc.Chainable(id) Then
                    Exit While
                End If

                pdfDoc.Page = pdfDoc.AddPage()
                id = pdfDoc.AddImageObject(imgwater, 1)
            End While

            For i As Object = 1 To pdfDoc.PageCount
                pdfDoc.PageNumber = i
                pdfDoc.Flatten()
            Next

            If pdfDoc.PageCount > 0 Then
                pdfDoc.PageNumber = 1
            End If

            Dim theId As Integer = 0
            For i As Integer = 1 To pdfDoc.PageCount
                pdfDoc.PageNumber = i
                pdfDoc.Layer = pdfDoc.LayerCount + 1
                If i = 1 Then
                    theId = pdfDoc.AddImageToChain(theId)
                Else
                    pdfDoc.AddImageCopy(theId)
                End If
            Next

            pdfDoc.Save(generatedStream)
        End Using

        generatedStream.Position = 0

        Return generatedStream.ToArray()
    End Function

我如何在每一页添加一个半透明水印?

因为ABCPDF不认为PNG是一个合适的图像文件,比如说什么?我每天使用PNG和ABCpdf。您使用的是什么版本?我当时使用的是8.1。从6.5.0版开始,我就在abcPDF中使用PNG。我从来没有找到解决这个问题的方法,所以我最终使用HTML/CSS来完成我当时需要做的事情。查看WebSupergoo的网站,我在他们的常见问题中发现了这一点:为什么AddImage不能处理我的GIF图像?您可以向AddImage传递JPEG、TIFF或EMF文件的路径。这会将原始压缩数据插入到PDF文档中。其他图像类型(如GIF)不能直接插入-必须将其绘制到图像对象中,然后才能将图像对象添加到PDF文档中。ABCpdf文档中有一些示例。我用的是一个PNG文件的AddImage。啊!我已经很久没有写那个代码了,我已经忘记了。对于PNG,我将PNG拉入XImage,然后使用AddImageObject。为了在网站上缓存这些数据,我实际上使用字节数组来保存PNG数据,然后再将其传递给XImage。有关接收PNG文件并输出Doc文件的代码段,请参见。在我的工作流程中,我通常将该文档放在下一个文档中。