vb.net - 在 iTextSharp 中创建带有图像(来自文件的数据流)的 PDF
问题描述
我正在尝试按照此示例创建带有图像的 PDF 带有图像的 示例 PDF
我正在使用 VB.NET (ASP.NET 3.5) 中的 VS2013 进行开发。
我快疯了,我不明白两件事:
我必须在 IMG 标签中传递的名称是什么。src 属性不包含 http-Url。而是使用前缀 data:imagestream 来标识图像的源类型。在以下斜杠之后,列出了 .NET 库清单中的资源名称。
当执行 CustomImageTagProcessor 类中的 END ovveride 函数时
我在项目中嵌入了一个图像,清单包含
...
}
.mresource public Test1.phone.jpg
{
// Offset: 0x00000000 Length: 0x00003E0D
}
.mresource public Test1.Resources.resources
{
// Offset: 0x00003E11 Length: 0x0000406B
}
我正在逐步调试,但从未执行过 ovverride 函数中的代码。
这是生成PDF的功能
Public Function CreateFromHtml(ByVal html As String) As Stream
Dim stream = New MemoryStream()
Using doc = New Document(PageSize.A4)
Using ms = New MemoryStream()
Using writer = PdfWriter.GetInstance(doc, ms)
writer.CloseStream = False
doc.Open()
Dim tagProcessors = CType(Tags.GetHtmlTagProcessorFactory(), DefaultTagProcessorFactory)
tagProcessors.RemoveProcessor(iTextSharp.tool.xml.html.HTML.Tag.IMG)
tagProcessors.AddProcessor(iTextSharp.tool.xml.html.HTML.Tag.IMG, New CustomImageTagProcessor())
Dim cssFiles = New CssFilesImpl()
cssFiles.Add(XMLWorkerHelper.GetInstance().GetDefaultCSS())
Dim cssResolver = New StyleAttrCSSResolver(cssFiles)
Dim charset = Encoding.UTF8
Dim context = New HtmlPipelineContext(New CssAppliersImpl(New XMLWorkerFontProvider()))
context.SetAcceptUnknown(True).AutoBookmark(True).SetTagFactory(tagProcessors)
Dim htmlPipeline = New HtmlPipeline(context, New PdfWriterPipeline(doc, writer))
Dim cssPipeline = New CssResolverPipeline(cssResolver, htmlPipeline)
Dim worker = New XMLWorker(cssPipeline, True)
Dim xmlParser = New XMLParser(True, worker, charset)
Using sr = New StringReader(html)
xmlParser.Parse(sr)
doc.Close()
ms.Position = 0
ms.CopyTo(stream)
stream.Position = 0
End Using
End Using
End Using
End Using
Return stream
End Function
这是 CustomImageTagProcessor 的类
Imports iTextSharp.tool.xml
Imports System.Reflection
Imports iTextSharp.text
Public Class CustomImageTagProcessor
Inherits iTextSharp.tool.xml.html.Image
Public Overrides Function [End](ByVal ctx As IWorkerContext, ByVal tag As Tag, ByVal currentContent As IList(Of IElement)) As IList(Of IElement)
Dim src = String.Empty
If Not tag.Attributes.TryGetValue(iTextSharp.tool.xml.html.HTML.Attribute.SRC, src) Then Return New List(Of IElement)(1)
If String.IsNullOrEmpty(src) Then Return New List(Of IElement)(1)
If src.StartsWith("data:imagestream/", StringComparison.InvariantCultureIgnoreCase) Then
Dim name = src.Substring(src.IndexOf("/", StringComparison.InvariantCultureIgnoreCase) + 1)
Using stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(name)
Return CreateElementList(ctx, tag, Image.GetInstance(stream))
End Using
End If
Return MyBase.[End](ctx, tag, currentContent)
End Function
Protected Function CreateElementList(ByVal ctx As IWorkerContext, ByVal tag As Tag, ByVal image As Image) As IList(Of IElement)
Dim htmlPipelineContext = GetHtmlPipelineContext(ctx)
Dim result = New List(Of IElement)()
Dim element = GetCssAppliers().Apply(New Chunk(CType(GetCssAppliers().Apply(image, tag, htmlPipelineContext), Image), 0, 0, True), tag, htmlPipelineContext)
result.Add(element)
Return result
End Function
End Class
非常感谢您的帮助。我希望你们。
解决方案
The problem was a lost
</img>
tag
Self Closed tag is not valid.
When i put tag also code inside overrided function has been executed.
Thanks so much.
推荐阅读
- react-native - 在 react-native 中,使用 linking.openURL(tel) 调用后,没有导航到我的应用程序
- visual-studio - 在 Visual Studio 上对解决方案进行批量构建时收到警告
- excel - UNIQUE 论坛的“无法更改数组的一部分”错误
- android - dagger2 不提供基础活动注入
- c++ - pow(x,3.0f) 与 x*x*x 的性能?
- java - java.lang.String 无法在 java 中转换为 JSONObject
- amazon-web-services - 使用带有主题 ARN 和电子邮件地址的 AWS Lambda fn 取消订阅 Amazon SNS 主题
- unity3d - AR相机与平面上目标物体的角度信息(度)
- swiftui - 如何在 SwiftUI 中使两个 Text() 视图具有相同的动态字体大小,从而最大化字体大小?
- spring - Spring AspectJ 加载时间编织不适用于 5.3.3 和 Tomcat 9.0.37