以PrintDialog编程选择打印机

时间:2014-04-30 15:56:47

标签: c# pdf printing

我在Windows窗体中有一个Web浏览器控件。它加载一个HTML文件。我希望能够为用户提供一个选项,将其另存为PDF文件。

如果用户有" CutePDF Writer"安装然后我想我可以从Print Dialog以编程方式选择它并将其另存为PDF。我正在使用Web_browser_control.ShowPrintDialog()显示PrintDialog。有没有办法在这个打印对话框中以编程方式选择打印机(在我的情况下为CutePDF Writer)而无需用户干预?

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

你可以这样做,

<!DOCTYPE html>
<meta charset="utf-8">
<style>

path {
  pointer-events: all;
  fill: none;
  stroke: #666;
  stroke-opacity: 0.2;
}

.active circle {
  stroke: #000;
  stroke-width: 2px;
}

</style>
<svg width="960" height="500"></svg>
<script src="http://d3js.org/d3.v4.min.js"></script>
<script>

var svg = d3.select("svg"),
    width = +svg.attr("width"),
    height = +svg.attr("height"),
    radius = 32;

// here you can specify your dataSet as long as it's an array of object with x and y value

var circles = [{x:190,y:80} , {x:50,y:150}];

var color = d3.scaleOrdinal()
    .range(d3.schemeCategory20);

var voronoi = d3.voronoi()
    .x(function(d) { return d.x; })
    .y(function(d) { return d.y; })
    .extent([[-1, -1], [width + 1, height + 1]]);

var circle = svg.selectAll("g")
  .data(circles)
  .enter().append("g")
    .call(d3.drag()
        .on("start", dragstarted)
        .on("drag", dragged)
        .on("end", dragended));

var cell = circle.append("path")
  .data(voronoi.polygons(circles))
    .attr("d", renderCell)
    .attr("id", function(d, i) { return "cell-" + i; });

circle.append("clipPath")
    .attr("id", function(d, i) { return "clip-" + i; })
  .append("use")
    .attr("xlink:href", function(d, i) { return "#cell-" + i; });

circle.append("circle")
    .attr("clip-path", function(d, i) { return "url(#clip-" + i + ")"; })
    .attr("cx", function(d) { return d.x; })
    .attr("cy", function(d) { return d.y; })
    .attr("r", radius)
    .style("fill", function(d, i) { return color(i); });

function dragstarted(d) {
  d3.select(this).raise().classed("active", true);
}

function dragged(d) {
  d3.select(this).select("circle").attr("cx", d.x = d3.event.x).attr("cy", d.y = d3.event.y);
  cell = cell.data(voronoi.polygons(circles)).attr("d", renderCell);
}

function dragended(d, i) {
  d3.select(this).classed("active", false);
}

function renderCell(d) {
  return d == null ? null : "M" + d.join("L") + "Z";
}

</script>

参考,https://andres.jaimes.net/65/how-to-choose-a-printer-using-c-sharp/

答案 1 :(得分:0)

不太确定,但打印对话框具有与打印机设置相关的属性,您可以在其中定义默认打印机。

Here在SO中提出了类似的问题,唯一的区别是它被要求提供窗口。无论如何,PrintDialog在网络上也以类似的方式工作。