提取网页中用控件生成的、没有物理路径的图片

最佳木匠 2012-08-13 09:59:32
我要做的工作是:把这个页面做成一个PDF文件。方法是:选择了一个PDF文件做模板,然后把页面上相应数据写入到模板,然后保存成一个新的PDF文件。
写入字符没问题,遇到的问题就是图片,我要用ABCpdf中的.SetFile()方法,把某路径下的图片添加到要导出的PDF文件中。因为页面上用WebChartViewer生成的图片,并没有把图片保存成具体的jpg或者其它格式的图片,所以我没法取到图片。图片属性是:
Reportbm.aspx?JobID=225&PID=2049&EPID=0&cer=8A83471F8AE9A4093279CD489C622D8A&ChartDirectorChartImage=chart_wv1
&cacheId=6a42abf497f645b7b3797576e78f3173&cacheDefeat=634801953057187500

应该怎么得到这图片?或者有没有截取页面某区域并保存成图片的函数或者方法,

我用的是ASP.net(C#)

那位有解决方案,请帮下忙,先谢谢了!
...全文
191 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
robake 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
不是外部的,企业内部用的系统……
[/Quote]

那也有个浏览器URL吧!

如http://192.168.1.2/ReportPD/ReportBM.aspx
最佳木匠 2012-08-16
  • 打赏
  • 举报
回复
不是外部的,企业内部用的系统……
robake 2012-08-16
  • 打赏
  • 举报
回复
你这个地址串难道没有外部访问地址吗?不能通过浏览器访问吗?

把这个地址补充完整不就可以了?
robake 2012-08-16
  • 打赏
  • 举报
回复
那么,你的图片在右键里的属性是什么?

你这些图片是通过什么方式访问的?服务器上有web服务吗?如IIS。

如果没有地址串,你如何能访问到这些图片的?
最佳木匠 2012-08-16
  • 打赏
  • 举报
回复
网络图片网址要的是这样的:
http://avatar.profile.csdn.net/F/2/D/2_robake.jpg
robake 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
theStream = File.OpenRead(thePath);这里的thePath也是读取的图片文件,不是生成的图片

XImage theImg = new XImage();
string thePath;
thePath = Server.MapPath("../mypics/mypic.tif");
Stream theStream;
theStream = File.……
[/Quote]

theStream = File.OpenRead(thePath);这里的thePath也是读取的图片文件,不是生成的图片


你这里是通过路径读图片,但结果是生成theStream这个流对象,这个可以确认吧。

Reportbm.aspx?JobID=225&PID=2049&EPID=0&cer=8A83471F8AE9A4093279CD489C622D8A&ChartDirectorChartImage=chart_wv1
&cacheId=6a42abf497f645b7b3797576e78f3173&cacheDefeat=634801953057187500
你的这个地址是能够正常显示图片,对吧?

你可以使用webrequest或者其他的将这里的图片读到Stream流中,存到theStream对象里,明白吗?

你可以查下webrequest或是webclient
最佳木匠 2012-08-15
  • 打赏
  • 举报
回复

代码如下
string dt = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString("00") + DateTime.Now.Day.ToString("00") + DateTime.Now.Hour.ToString("00") + DateTime.Now.Minute.ToString("00") + DateTime.Now.Second.ToString("00");
Uri downUri = new Uri(Server.MapPath("ReportPD/ReportBM.aspx?JobID=225&PID=2049&EPID=0&cer=8A83471F8AE9A4093279CD489C622D8A&ChartDirectorChartImage=chart_wv1&cacheId=6a42abf497f645b7b3797576e78f3173&cacheDefeat=634801953057187500"));
//建立一个WEB请求,返回HttpWebRequest对象
HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(downUri);
//设置接收对象的范围为0-10000000字节。
hwr.AddRange(0, 10000000);
//流对象使用完后自动关闭
using (Stream stream = hwr.GetResponse().GetResponseStream())
{
//文件流,流信息读到文件流中,读完关闭
using (FileStream fs = File.Create(@"c:\"+dt+".png"))
{
//建立字节组,并设置它的大小是多少字节
byte[] bytes = new byte[102400];
int n = 1;
while (n > 0)
{
//一次从流中读多少字节,并把值赋给N,当读完后,N为0,并退出循环
n = stream.Read(bytes, 0, 10240);
fs.Write(bytes, 0, n); //将指定字节的流信息写入文件流中
}
}
}
最佳木匠 2012-08-15
  • 打赏
  • 举报
回复
用webrequest了,还是报错:

异常详细信息: System.Web.HttpException: “ReportPD/ReportBM.aspx?JobID=225&PID=2049&EPID=0&cer=8A83471F8AE9A4093279CD489C622D8A&ChartDirectorChartImage=chart_wv1&cacheId=6a42abf497f645b7b3797576e78f3173&cacheDefeat=634801953057187500”不是有效的虚拟路径

如果如果把路径换成“http://www。。。。。。。。XX.jpg”的,就可以……

烦了!!
最佳木匠 2012-08-15
  • 打赏
  • 举报
回复
怎么用webrequest将这里的图片读到Stream流中啊?我不会写,百度也找不到合适我的,好多winform程序的……
最佳木匠 2012-08-14
  • 打赏
  • 举报
回复
theStream = File.OpenRead(thePath);这里的thePath也是读取的图片文件,不是生成的图片

XImage theImg = new XImage();
string thePath;
thePath = Server.MapPath("../mypics/mypic.tif");
Stream theStream;
theStream = File.OpenRead(thePath);
theImg.SetStream(theStream);
robake 2012-08-14
  • 打赏
  • 举报
回复
theStream = File.OpenRead(thePath);
theImg.SetStream(theStream);

看到这里了吗?你可以先用Image对象,将图片转换成流,也就是说,你那个文件可以将图片直接输出为二进制的流,然后在theImg.SetStream里输入就可以了。
robake 2012-08-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
能说的详细一点吗?

ABCpdf这个插件我不熟悉,不知道它都有什么方法
[/Quote]

这个我也不清楚,你使用这个插件,没看文档吗?
最佳木匠 2012-08-13
  • 打赏
  • 举报
回复
能说的详细一点吗?

ABCpdf这个插件我不熟悉,不知道它都有什么方法
robake 2012-08-13
  • 打赏
  • 举报
回复
XImage这个有没有读取Stream流的方法?

我记得Image对象里有Stream读取的方法
最佳木匠 2012-08-13
  • 打赏
  • 举报
回复
回复1楼:

图片是由Reportbm.aspx这个页面生成的,不过你说的<img src=Reportbm...>是在普通的页面显示图片用的,我现在是用ABCpdf生成pdf文件,要引用有具体路径的图片,写法如下:

XImage theImg = new XImage();
theImg.SetFile(Server.MapPath(@"PDF\Reportbm.png"));

按照你的意思就是这样写了:

XImage theImg = new XImage();
theImg.SetFile(Server.MapPath(@"ReportPD/ReportBM.aspx?JobID=225&PID=2049&EPID=0&cer=8A83471F8AE9A4093279CD489C622D8A&ChartDirectorChartImage=chart_wv1&cacheId=6a42abf497f645b7b3797576e78f3173&cacheDefeat=634801953057187500"));


这样会提示错误“ReportPD/ReportBM.aspx?JobID=225&PID=2049&EPID=0&cer=8A83471F8AE9A4093279CD489C622D8A&ChartDirectorChartImage=chart_wv1&cacheId=6a42abf497f645b7b3797576e78f3173&cacheDefeat=634801953057187500不是有效的虚拟路径。”


不知道我的意思表达清楚了没有……
robake 2012-08-13
  • 打赏
  • 举报
回复
你的图片是由Reportbm.aspx这个页面生成的吗?

那么直接<img src=Reportbm...>就可以了。

如果不是,可以改造你的程序,用Stream流读取,二进制输出为图片,再用img src=调用就可以了
最佳木匠 2012-08-13
  • 打赏
  • 举报
回复
最佳木匠 2012-08-13
  • 打赏
  • 举报
回复
找到了的ABCpdf帮助文档http://www.websupergoo.com/helppdf7net/default.html
最佳木匠 2012-08-13
  • 打赏
  • 举报
回复
找到了个帮助文档,里面图片还是给出了路径:
XImage theImg = new XImage();
string thePath;
thePath = Server.MapPath("../mypics/mypic.tif");
Stream theStream;
theStream = File.OpenRead(thePath);
theImg.SetStream(theStream);
theStream.Close();
Doc theDoc = new Doc();
theDoc.Rect.Inset(20, 20);
theDoc.AddImageObject(theImg, false);
theImg.Clear();
theDoc.Save(Server.MapPath("imagesetstream.pdf"));
theDoc.Clear();

估计用ABCpdf是没法将生成的图片写到pdf文件里了。
robake 2012-08-13
  • 打赏
  • 举报
回复
VS的自动提示里没有吗?试着找找
加载更多回复(1)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧