C# 正在尝试将字节[]转换为位图,但给出的错误为“0”;参数无效";在c中#
编辑:在您的评论之后: 事实上,我试图捕获整个页面作为一个随机网站的图片转换为PDF格式 那你就走错方向了。你需要启动一个浏览器(例如a)并以某种方式进行屏幕截图。这将是非常重要的。同样重要的是,你要理解为什么你目前的方法不起作用——这表明你对网络的工作方式有一个根本性的误解 原始答案 这是你最根本的问题:C# 正在尝试将字节[]转换为位图,但给出的错误为“0”;参数无效";在c中#,c#,bitmap,C#,Bitmap,编辑:在您的评论之后: 事实上,我试图捕获整个页面作为一个随机网站的图片转换为PDF格式 那你就走错方向了。你需要启动一个浏览器(例如a)并以某种方式进行屏幕截图。这将是非常重要的。同样重要的是,你要理解为什么你目前的方法不起作用——这表明你对网络的工作方式有一个根本性的误解 原始答案 这是你最根本的问题: public class PrintPage { public void buildPdf(string url) { Bitmap bmp
public class PrintPage
{
public void buildPdf(string url)
{
Bitmap bmp = PrintHelpPage(url);
Document dc = new Document();
PdfWriter pdfWrt = PdfWriter.GetInstance(dc, new FileStream(@"D:/Experiment/Sample.pdf", FileMode.Create));
dc.Open();
iTextSharp.text.Image pdfImage = iTextSharp.text.Image.GetInstance(bmp, System.Drawing.Imaging.ImageFormat.Jpeg);
dc.Add(pdfImage);
dc.Close();
}
private Bitmap PrintHelpPage(string url)
{
if (url.ToUpper()=="DEFAULT")
{
url = @"https://www.google.com";
}
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
System.Text.Encoding Enc = System.Text.Encoding.GetEncoding(response.CharacterSet);
StreamReader sr = new StreamReader(response.GetResponseStream(), Enc);
string sDoc = sr.ReadToEnd();
sr.Close();
byte[] by = Encoding.ASCII.GetBytes(sDoc);
Bitmap bm = ByteToImage(by);
return bm;
}
public static Bitmap ByteToImage(byte[] blob)
{
using (MemoryStream mStream = new MemoryStream())
{
mStream.Write(blob, 0, blob.Length);
mStream.Seek(0, SeekOrigin.Begin);
Bitmap bm = new Bitmap(mStream);
return bm;
}
}
}
您正在读取图像,就像它是文本文件一样。不会的。您将丢失这样的数据
此外,您正在关闭传递到位图
构造函数的内存流-您不应该这样做
您只需将响应流直接复制到内存流
,并将其用于位图
:
System.Text.Encoding Enc = System.Text.Encoding.GetEncoding(response.CharacterSet);
StreamReader sr = new StreamReader(response.GetResponseStream(), Enc);
string sDoc = sr.ReadToEnd();
sr.Close();
byte[] by = Encoding.ASCII.GetBytes(sDoc);
哦,您还应该对响应使用
using
语句,否则将无法处理,这可能会由于连接池而导致未来请求超时。@Herohanif:那么URL实际上是图像的URL吗?(例如,Google URL当然不是图像…)不,它不是图像URL,实际上我正试图将整个页面捕获为随机网站的图片,以转换为PDF。@Herohanif:这样做你不会有任何运气-你基本上需要启动浏览器,并拍摄屏幕截图。以后,请在你的问题中给出更多的解释——你根本没有提到这一点。问题应该总是有解释性的文本,而不仅仅是代码。请阅读谢谢。所以我会照你说的做。这样做会产生解码问题吗?我主要发现“((System.IO.Stream)(Stream)).ReadTimeout”引发了“System.invalidoOperationException”类型的异常。@Herohanif:是的,您试图将HTML解码为位图。不过,还不清楚ReadTimeout
是从哪里来的,因为这在您的问题中没有出现过。。。
MemoryStream stream = new MemoryStream();
using (var input = response.GetResponseStream())
{
input.CopyTo(stream);
}
stream.Position = 0;
Bitmap bitmap = new Bitmap(stream);