|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑 - @4 {# |3 c; j) c
0 z! p7 P' x& u& Z- \ I! _1 G. I* U
版主及各位朋友:中午好!, N1 K W: T& G. S* C3 c; S* D7 H: w
" o6 i) L. v0 U- p
CAD版本:AutoCAD Electrical 2010, c" K' W7 B- M% u! S) b: r
6 G d. F5 m/ h5 Q5 _ 我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!
) P+ j- B/ k3 X8 U 问题如下:
2 d2 g) F) I& c) k; k 我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3 打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。
0 I& V1 R3 r. ?, p& j* v0 z# O* e; [. Y5 w2 B
上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题。
: M. i8 A8 D" p0 k) f" ]: M S: ^: p% z. j! }: r/ J+ ~1 Z) j
后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。7 [' d$ P9 ?$ \% F: K+ V6 q! o
尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)6 E. \1 m' H$ K% V! p+ i
" k) z* q+ C- H! U+ I% Y% g) a
问题汇总:4 ?: |$ E0 V$ M! T0 D
1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?
0 j7 _ [' o I1 X# `5 v: m1 x 2、 “Adobe PDF” 打印机如何设置字体?
# K( v+ `5 \& I 注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。- '--------------------------------------------------------------------------------------- D8 V( S) @- S& E6 [ I; b" p
- ' Procedure : CreatePDF
2 p! l' y, ] c. `5 o- a: o% t4 [ - ' DateTime : 2013-11-20+ i1 x" o4 P& Y; O# u
- ' Author : xwang% H* |+ P0 w. _% e* k
- ' Purpose : CAD中DWG图纸导出PDF文件- i# ~5 Y4 q& v, t5 v
- ' param : acadDoc: AcadDocument
N* F- ?# R' d8 ]. S2 B - ' : filename: DWGFile
# E! d3 k# | \; D+ \' l6 w - ' : strPdfFile PdfFile
( I# `7 U. c! I - ' : ConfigName: Acade - DWG To PDF.pc3
' t/ W& |8 _" _- k; e- ] - '---------------------------------------------------------------------------------------
- {+ a1 y5 o+ ^5 z - Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer! J0 q. n, L& I' L$ E
& r- J |$ ~6 G& @; Y- Dim PtConfigs As AcadPlotConfigurations3 V$ _; Z4 U# q5 B5 {' ~
- Dim PlotConfig As AcadPlotConfiguration! X, j% x! [7 M5 x5 Q7 c: n% h9 ^
- Dim PtObj As AcadPlot: Z0 @ e. D) [9 P- f
- Dim BackPlot As Variant
$ I% a& D: A# c -
) l% B E: Q0 z9 B! e4 M' D - Dim ent As AcadEntity 'Object/ V8 c$ e7 m n' q
- Dim blockRef As AcadBlockReference
5 e4 |' ?+ U1 m% I c, q - + E$ X6 L& W- @ j' z" X6 R4 @+ u
- On Error GoTo ErrExit
8 l, z. D* G: S, b# x( s
* c6 s2 G5 H0 O4 e3 l$ T- x- Debug.Print "CreatePDF ------------------------------------------------->"
* y$ h0 w3 v+ a: R" m) P& M - Debug.Print "打印机:" & ConfigName/ r* v% P1 R' N3 K" q" @
- For Each ent In acadDoc.ModelSpace! S8 S- _3 d; F
- If TypeOf ent Is AcadBlockReference Then9 N; Y5 `! @# E
- DoEvents
' w. V/ Z3 V4 ~; f$ C - Set blockRef = ent/ X! x8 W% ~2 r8 w ~
- If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
( J0 y9 ]( b, C& C- F6 k: {1 i
& h6 a+ X( z; K% x$ d- T1 M- Debug.Print "块名称:" & blockRef.Name
& [; F, @0 z; b J1 W -
: E1 J% u" F, {, F3 H2 z - '块引用的插入点
! Y% I$ `7 I. m3 A' M( f - Dim insertPoint As Variant
2 k! C% Q: w( _" Z1 {7 P3 P - insertPoint = blockRef.InsertionPoint
8 j9 N" T }/ l0 _. ^$ I# a, y - '放大比例. r3 Z H" g" k# s8 h
- Dim xScale, yScale As Integer
0 F/ J7 t% S! g6 |5 O' [) L - xScale = blockRef.XScaleFactor% Y& r3 V8 m7 }. _6 |3 U
- yScale = blockRef.YScaleFactor
1 C" r! w ? d- i - & I; S# @/ P, r
- acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"% d& Z3 j1 M* u& Z. @, h9 z! F7 j
- Set PtObj = acadDoc.Plot9 h4 p4 m" T( M+ m. Z
- Set PtConfigs = acadDoc.PlotConfigurations
( |0 S4 B" d7 | - 9 M/ \) S/ V+ @ G0 t7 q# _
- PtConfigs.Add "PDF", False
9 w, F9 K8 j$ J3 @" r- l1 e7 j! ^ - Set PlotConfig = PtConfigs.Item("PDF")! {& u: M2 I; S( |6 y3 [1 U7 i/ V, Q
- PlotConfig.StandardScale = acScaleToFit3 J$ ]( N) J2 s8 b) B' r
- 4 Y! u ?% @) e* Q$ s& W1 J
- PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"6 }* ?% W8 W5 l4 S/ d8 a; m0 S
- 'ANSI_A_(8.50_x_11.00_Inches)
! B. ]& B' H, y0 z - PlotConfig.RefreshPlotDeviceInfo
1 ^6 V, v; \5 C, g6 ~. P
1 p9 ?" F; c7 U/ e$ z. a$ N- Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet, x4 s g7 K9 \: a
- Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName1 b/ j2 v0 N" c: P! F! k/ ~& E
- , |3 p2 [) o) Q$ O1 l) y
- acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式) B3 }+ s1 Q9 V, S
- , t ]! Q& L- i! h8 }
- '使用图形文件的线宽
" {! l$ r4 C( s0 B& U - PlotConfig.PlotWithLineweights = True
& \0 m6 i: g1 b. C4 k - '是否启用打印样式
6 Q0 [ {# e7 z/ }$ N; `9 q' h* c - PlotConfig.PlotWithPlotStyles = True% y2 g! d" k, _# o% H! ^3 X g
- % a7 ^+ \/ ^3 L2 Z
- '宽高基数/ I8 N- S/ y w& m; a
- Dim width, height As Double
. m% p4 b0 z9 _9 b - If blockRef.Name = "ACE A3块" Then
7 g. t1 f# H2 i/ x; J0 v5 o: ~; S - width = 4206 c& u2 J: C, x4 _+ i* Q
- height = 297
# {% H9 |3 C7 r5 Q4 R8 Q) V i) i: w - acadDoc.ActiveLayout.PlotRotation = ac90degrees
: X% p6 L4 |" C2 q+ s - acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)" k6 y/ z; d& a. a& g3 w- M) u
- ElseIf blockRef.Name = "ACE A4块" Then
! O/ F2 x7 O9 N6 \1 z - width = 210
& ]. t) d: N+ _9 ~1 Y7 k: y - height = 297/ m8 T( K+ s5 M6 e
- acadDoc.ActiveLayout.PlotRotation = ac0degrees0 b( u, f1 |5 R+ w
- acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"
3 K4 f& N j* \ - End If
! ?& {" g }& Q - 3 C. n* h5 \: O4 n2 h$ C9 ?. l
- '打印区域
3 A3 i' |1 s. J0 v- f$ o' g+ d - Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double0 r, g9 |0 Q+ V1 g' B
- LowerLeft(0) = insertPoint(0)) a* o3 @: p7 K: v! M* `+ |/ l
- LowerLeft(1) = insertPoint(1)0 C/ [/ g+ U* @8 W) W# h( ~
- UpperRight(0) = insertPoint(0) + width * xScale
" y: m2 }8 i8 g8 T9 _ - UpperRight(1) = insertPoint(1) + height * yScale+ S4 q% r9 J4 b# q/ \ N6 A( x
-
9 s1 x9 o; g& _ - '设置定义要打印的布局范围的坐标9 }& n2 I/ ~" G4 ?/ k; ~/ J( b, @
- acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight- ~" y# O' h5 Z
- '指定布局或打印配置的类型
: _) O- C- P" I1 `7 P - acadDoc.ActiveLayout.PlotType = acExtents& h# [- T( w& d- ]" s
- , _4 W& V$ L0 `9 t: s, X# N
- BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")7 Y/ [, M7 B3 R- l& f
- acadDoc.SetVariable "BACKGROUNDPLOT", 0
- g. l i |) D; I8 R7 v - PlotConfig.RefreshPlotDeviceInfo9 F* |# {8 G+ l; y
- " q: r8 x' \. v7 x& S: h4 L2 I% N) P
- Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet
* r$ {9 l$ `; j" o - Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
, u5 X8 }4 g7 X( L I - Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
+ ?+ F% w8 ]+ I! I - Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName3 x& m$ i7 l$ P. u, S
- " L7 d! s8 @8 \$ ]5 J$ n/ O$ Z
- strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf"), T2 J( e0 r) g8 D# H8 j0 e( `
- Debug.Print "输出位置:" & strPdfFile2 T3 c6 |0 X; k7 |5 M& e; @6 T
- & c2 V) O+ i z0 U5 b% n% h
- 'Now you can use the PlotTofile method- H2 i5 J" i7 _5 E$ ^% H
- If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then1 u: X" ?; g0 S A
- Debug.Print "PDF Was Created"
( \$ L' e6 X0 T+ z- R( J& X - Debug.Print "PDF Was Created"
! E2 R& _+ E- i, H8 m4 L - Else8 e& w( {% v4 G/ e4 I! i5 A
- Debug.Print "PDF Creation Unsuccessful!"
8 s. M# i' E. l7 X$ |1 w - Debug.Print "PDF Creation Unsuccessful!"" q. r- v' }& I3 `3 {2 Y6 q+ b* r; y
- End If0 r D. U4 s* f
- PtConfigs.Item("PDF").Delete0 L7 D1 X0 U4 }% o. X% _( |
- Set PlotConfig = Nothing; l0 @7 b% W, ?9 E$ F2 c
- acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot" t8 n- @( V2 Z& _$ B6 K6 l
-
. V/ v6 L4 |# \, s6 i6 y R. Y - Debug.Print "CreatePDF ok!": v' _" O( m6 n/ G9 j: v$ p
- End If6 h3 `+ `: y' f4 H C8 B+ u
- End If4 I8 v1 b4 R% F, A5 |8 E/ o& {6 O$ n
- DoEvents
* [) g; Y+ ?8 O+ H - Next ent
7 D2 h" \4 O W/ ^& ^( j* L - Debug.Print "CreatePDF -------------------------------------------------<"6 o" e/ \" P+ ~3 n- c* g
- Exit Function
, X: g0 `1 ~& W2 t - # ]5 r6 o+ `% Q! i
- ErrExit:
* w/ f- w) S5 Y4 X8 X - CreatePDF2 = -1. ]5 G% r: x% ^: l& k* i8 S# p
- Debug.Print "CreatePDF Error:" & Err.Description
9 n5 r' M8 g# h- ?) U% r8 u6 U/ E - MsgBox "CreatePDF error:" & Err.Description% x# n# S# G' a3 b; ]6 g
- End Function
复制代码 |
-
|