|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑
1 Z9 z, i X' r; O- N0 j( [% {# ^* V7 C4 T' Q8 i
版主及各位朋友:中午好!
3 V7 |& N( n7 K9 C) c . N i- f( m4 Y; i: W
CAD版本:AutoCAD Electrical 20101 H1 |" K/ }) S
% G, m7 y- s$ ]/ w 我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!
+ F5 u/ R+ J) M& E5 V% S 问题如下:& P; |( [8 }# Q' N
我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3 打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。( }# c/ {5 n* p' T9 u
/ o* V# @& E+ J4 t* i
上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题。
$ b5 L- L5 o: M0 O4 p% A/ |% | H% v2 \( g$ m$ F
后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
9 p; {3 w3 W( A5 [) o$ b 尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)3 }; c! G9 g/ z. P# D# F# p% K, k% f
4 I3 D/ U7 K6 ^
问题汇总:
3 N0 ? S- |/ w3 u8 \ 1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?# o9 e- O4 n, X4 n4 S- h" g
2、 “Adobe PDF” 打印机如何设置字体?
3 H7 ?: z1 X3 h4 A5 V$ t3 V 注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。- '---------------------------------------------------------------------------------------
7 g3 \$ y: N& [; ^/ i) S - ' Procedure : CreatePDF) i& g( } m; Q; L/ s+ _3 Z
- ' DateTime : 2013-11-20- N" h; N- W5 l# d! w. J- o) b
- ' Author : xwang4 |2 \. A$ U8 A# s7 y
- ' Purpose : CAD中DWG图纸导出PDF文件
- J$ r9 ~7 v l - ' param : acadDoc: AcadDocument) T' I. r. C$ j- m; h+ F
- ' : filename: DWGFile
1 l4 p9 M3 q4 m9 Y0 n( t: p3 { - ' : strPdfFile PdfFile" I" K" G+ c' {; M
- ' : ConfigName: Acade - DWG To PDF.pc35 c- ?& [5 s8 ]5 w; K% C
- '---------------------------------------------------------------------------------------/ G2 j$ Q6 v9 G! ?% u0 z R! D
- Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer
5 x) m; C3 L* n3 |; ~$ B1 r6 L
) o) C# X. X! I8 U1 D9 D- Dim PtConfigs As AcadPlotConfigurations
! C/ m$ i( B& {) ~ - Dim PlotConfig As AcadPlotConfiguration
- K; S; h3 `% n7 f3 [. f - Dim PtObj As AcadPlot# K/ V3 e: f( d5 }9 o& P8 O; b
- Dim BackPlot As Variant& Z/ v/ i$ e3 P: T# l
- ( f' c0 I0 p! d( }
- Dim ent As AcadEntity 'Object
" f/ D. e; f9 E! j1 w - Dim blockRef As AcadBlockReference
4 K/ B; _9 ?" j' F( F* N! W - / @' J Z1 G: N ]. S
- On Error GoTo ErrExit
& A: r7 T6 M3 j) X: ~2 ?
! f5 z0 i+ ~3 g6 T l- Debug.Print "CreatePDF ------------------------------------------------->"9 B7 r( u: v& x2 f. [: o
- Debug.Print "打印机:" & ConfigName
. s1 k0 C1 Y7 i8 Z- h - For Each ent In acadDoc.ModelSpace. L+ V& g9 r" ]
- If TypeOf ent Is AcadBlockReference Then
! ^& a8 T- y- B - DoEvents0 D* k1 E0 A0 {; D( x$ I. [
- Set blockRef = ent
- d- }* R* |7 ^6 Q8 { - If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
/ T Z+ [) k# G1 V5 A5 W4 l - $ ?7 v, _( g# x) v0 d5 _: U; E% T
- Debug.Print "块名称:" & blockRef.Name X! `* X: l5 v. U) {6 n
-
6 i& a$ k9 K! P - '块引用的插入点$ P& G* |9 ]$ j6 V+ z$ l: u0 s9 b
- Dim insertPoint As Variant
^6 t0 D- M" K - insertPoint = blockRef.InsertionPoint b9 h/ z& x& ^# R" a& {' Y8 f! z
- '放大比例
4 A( ?/ A8 x" Y) M - Dim xScale, yScale As Integer0 K+ ~, f* t! u
- xScale = blockRef.XScaleFactor; l( r9 }( V% @* x' D/ c
- yScale = blockRef.YScaleFactor
; |5 t' a) K! W/ {3 O1 y& w c* ^( s - 0 n9 q9 y9 i/ {
- acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
7 T& ~ m+ Z- h0 R - Set PtObj = acadDoc.Plot7 ?/ R$ t& G. t/ i8 n
- Set PtConfigs = acadDoc.PlotConfigurations
+ x& I# H2 k1 L - # w: J2 {$ W' \+ F
- PtConfigs.Add "PDF", False
8 l/ m1 _/ c1 j0 } - Set PlotConfig = PtConfigs.Item("PDF")! d% }8 C j( ^0 q" |+ p" f
- PlotConfig.StandardScale = acScaleToFit
* ]+ ^6 R8 m9 q* s: j) ] -
- m7 s. _6 c# [ - PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"' g# @: E8 |; D3 k3 a* g
- 'ANSI_A_(8.50_x_11.00_Inches)
8 Q+ a+ B2 I& [; l - PlotConfig.RefreshPlotDeviceInfo% @ k+ S( j" a9 E1 T
# S. o; t5 ~9 w- Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet
) U; x7 Y7 C. ?) V1 D- U$ u) j - Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
( F& ]" t6 |7 i2 W - : O3 D) H5 R' }; X _4 U
- acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式6 {4 I* S6 U3 ~4 {& G
- + s! |7 h' O( R: k0 z# n
- '使用图形文件的线宽
% d2 {3 Y5 m9 T$ G8 Q3 a3 V L - PlotConfig.PlotWithLineweights = True' P. ` h* p1 R
- '是否启用打印样式. c9 ^3 I" k2 \- ~' H/ E F
- PlotConfig.PlotWithPlotStyles = True
! @( a. l& w- Z, b& d0 x$ ` - . \# ^! T* A$ `' x' S
- '宽高基数
1 J6 X' S; \: T6 Z - Dim width, height As Double
# x6 [2 \( e/ Z7 C5 b& R - If blockRef.Name = "ACE A3块" Then+ i8 y |5 o7 x7 l' r3 U
- width = 420
' H w4 x# `) H% E2 c' l- l - height = 297
0 Y( f3 ?* v0 G) S2 u, l& l% s - acadDoc.ActiveLayout.PlotRotation = ac90degrees' E3 X+ N c+ U; Y4 V# s3 j3 v9 f
- acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"0 N' F% B; X9 c6 p7 N
- ElseIf blockRef.Name = "ACE A4块" Then
3 T+ `* {; T E+ j5 ?5 b) `$ o - width = 210
. W' g) |& @# V! Y) ^0 h& Z - height = 297) k6 s; U! O2 r
- acadDoc.ActiveLayout.PlotRotation = ac0degrees3 D3 K6 a6 `, s4 h; @$ p' k2 E( d% i
- acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"
* n9 ?: S# R, w; ]1 J$ P - End If6 P& ]# _9 s7 x. X, c6 V) t
-
( U9 d' p, v$ r - '打印区域
3 F) E) O' f# [' x' |3 ^ - Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double: ?- G. f/ x; k3 D7 o# Z. u- F
- LowerLeft(0) = insertPoint(0)
- T; r3 `8 Y3 i" P! X - LowerLeft(1) = insertPoint(1)8 [. h6 n- x0 Q! _% u, v5 b9 k
- UpperRight(0) = insertPoint(0) + width * xScale
( Z: a9 B: P2 v% ]9 W# r& e( _0 A - UpperRight(1) = insertPoint(1) + height * yScale5 V+ n0 o" [/ s: K& O; ~
- ) @; }0 l5 d8 Z$ k, U+ Q# g
- '设置定义要打印的布局范围的坐标% a! h5 t1 S8 Q+ h& Q# Z* [/ c5 v
- acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight
. L$ \, m" |6 l$ Y4 C - '指定布局或打印配置的类型
- u9 U5 I' C: ^, g1 Y - acadDoc.ActiveLayout.PlotType = acExtents
* s% z2 x* ?, Q1 E; R3 u2 F -
% K. U' s1 ]3 D. z( x - BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")2 A5 y0 X$ e/ a; w
- acadDoc.SetVariable "BACKGROUNDPLOT", 0
- X+ t0 l/ L/ }7 V - PlotConfig.RefreshPlotDeviceInfo
: X$ t6 l0 f! q& L' a3 G5 [ - , G9 M: x: Q+ C4 g5 w' S& K, J
- Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet! n: C, I9 T/ ~
- Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
9 C8 F- f1 ^1 A - Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
( G7 K- L' Q9 T0 O - Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName& a& p. u) c% o! n( V0 X7 }
- 6 H5 j6 q1 `& M/ t l
- strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")/ g( B; z( `# d3 z+ C4 j5 f1 t8 t k
- Debug.Print "输出位置:" & strPdfFile8 Q( w4 Z- Z, e# {- S4 j3 `$ h
5 g+ s0 P1 J2 Z4 [6 ]' g- 'Now you can use the PlotTofile method
, ?$ M1 G; h" M - If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then
) k& h- V* [2 J+ J: D - Debug.Print "PDF Was Created"- @7 n0 J2 h+ u, K$ f1 _9 o
- Debug.Print "PDF Was Created"
M! E9 i* v D/ C* r' e0 ~ - Else; E7 R. P4 {" z p; N
- Debug.Print "PDF Creation Unsuccessful!"
9 W! p& k5 ^# M2 p0 |2 H8 \; n, \ - Debug.Print "PDF Creation Unsuccessful!"" R: p) x- l7 c
- End If" `; Q j' f. U5 ]& h* i( I3 x+ A
- PtConfigs.Item("PDF").Delete( n# P& {3 E7 [' x' M7 y1 b' L
- Set PlotConfig = Nothing6 D* M o" i% V$ I ?; V
- acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot, G' E, i; ~9 @8 @6 r
-
: m" l/ s) Q4 o; b5 c( R; ^ - Debug.Print "CreatePDF ok!"% G5 f5 j1 D4 ^* K$ T& F; F- |# B( o
- End If
* |9 }+ U; t1 W) S/ f5 r8 S8 h' b - End If
$ Y3 v' M. T' a - DoEvents
8 x+ `1 m, E* T" Z6 Y' G - Next ent
$ T7 i! V6 g, r5 z+ W - Debug.Print "CreatePDF -------------------------------------------------<"3 {2 @/ y }4 V/ y$ J: A
- Exit Function
# a6 T# ]/ K" ?" m3 Z5 O; @* x - + R) N. b$ m; c4 _& j
- ErrExit:
5 {- q$ ^! A, S T - CreatePDF2 = -1& E& D& N8 @2 d; `) \) p: m7 x
- Debug.Print "CreatePDF Error:" & Err.Description9 O7 R, A$ ^6 ~
- MsgBox "CreatePDF error:" & Err.Description+ y" O0 X3 B2 @3 F8 m
- End Function
复制代码 |
-
|