|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑
4 m$ F4 K6 F0 w8 ^, o/ W
5 e& U. r0 @9 L# ?. X版主及各位朋友:中午好!: i# g0 q* X+ V% U
8 Q# G( y- m0 X. ] CAD版本:AutoCAD Electrical 2010$ c' n8 r: L7 M5 v" Z1 H
" J2 D O8 O. v5 a# O% h
我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!6 z$ B, ^& `6 n+ m( r
问题如下:% ~9 Q- L/ t' V
我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3 打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。
' z# s0 i8 R6 j& e9 c6 X$ H$ n% t" P+ F- t C
上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题。 B# z4 y, X) Y2 S1 w) L
M! G ^% \5 m- y% Z5 W# n* _8 Y 后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。' o$ h0 F/ B! i" v6 D9 Z
尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
* x/ R- f* C/ d, j. u0 N/ E
- \4 F f2 Y+ p2 l; u- O* B) v 问题汇总:
$ V, T- e* }7 d 1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?5 S5 i1 U6 ^: H( A- C1 H% U$ ^
2、 “Adobe PDF” 打印机如何设置字体?
8 \! m! t6 q7 o. g5 T 注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。- '---------------------------------------------------------------------------------------
* X: ~' a. y; _ - ' Procedure : CreatePDF8 P* w% Z9 s! H6 D
- ' DateTime : 2013-11-20
" _6 c- E$ c+ x+ P* G - ' Author : xwang2 o: ?# K+ ]; g3 n
- ' Purpose : CAD中DWG图纸导出PDF文件
. D5 F' E6 T* ]0 q2 `; Y - ' param : acadDoc: AcadDocument
, x6 P7 n) A7 W, {$ c% c8 @# L - ' : filename: DWGFile) T6 R7 F4 o9 B0 \
- ' : strPdfFile PdfFile Q; \. M- O: J& k1 p
- ' : ConfigName: Acade - DWG To PDF.pc3
5 g8 k) e" Z9 }: L* Q/ R: h0 {/ e - '---------------------------------------------------------------------------------------
% h# _6 d1 b4 a1 S6 {: r6 V$ C - Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer
2 A- m' e/ p, b0 Y3 b- [ - 6 z2 x) v. u* n" i5 A! ]- J7 D# [
- Dim PtConfigs As AcadPlotConfigurations% f* ?$ ]; G4 m+ T- v, K( V" d
- Dim PlotConfig As AcadPlotConfiguration
! W7 \8 g0 r% b/ S& ?! @( N& Z - Dim PtObj As AcadPlot
$ J' w- y% ?- s- P: ?% { - Dim BackPlot As Variant
$ p8 B0 Q7 l4 {: `1 l -
3 P2 t- X N3 \. I' _" @ - Dim ent As AcadEntity 'Object
$ ^) Z4 y3 T F2 I) }1 G7 V+ |: J1 y - Dim blockRef As AcadBlockReference
/ z9 B# U, Y# `6 K' S - # o. I) o l, O9 n3 V
- On Error GoTo ErrExit
8 B% A2 ?/ W/ M6 X2 n& U
/ O$ j. c: e4 d$ P- Debug.Print "CreatePDF ------------------------------------------------->"( [& k; e* X1 N
- Debug.Print "打印机:" & ConfigName6 J" L. I/ F0 Z% Q8 h7 K" F
- For Each ent In acadDoc.ModelSpace
$ G9 f; r# a" t/ J - If TypeOf ent Is AcadBlockReference Then7 V* U4 `8 m$ H# Z$ P
- DoEvents
7 K. r0 Z/ Z. S* D \ - Set blockRef = ent
- L- s; B( X' G& W - If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
6 n. N" Y3 A+ f$ N1 D8 \
) @/ @( ]. c. |( h- Debug.Print "块名称:" & blockRef.Name
7 H3 P" Q9 Q" \/ X -
, t# y. `$ F. s+ p - '块引用的插入点$ Q1 B, x- ^: u( a
- Dim insertPoint As Variant: c$ Z) @/ \; b1 s& n! b$ C, d
- insertPoint = blockRef.InsertionPoint6 w/ V+ l0 X2 q8 ~0 w* |$ q e
- '放大比例: M/ Q |+ u8 J7 Y! c
- Dim xScale, yScale As Integer9 n9 W9 z9 ?( |" A
- xScale = blockRef.XScaleFactor
' r& A9 N2 Z$ z% D - yScale = blockRef.YScaleFactor
% P$ @# ?' i; `9 E( L - ) ?$ z2 c: g. Y' Y
- acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
) m: `9 Q9 L( Q - Set PtObj = acadDoc.Plot
( e% |4 ^" `2 i, Q% m8 b - Set PtConfigs = acadDoc.PlotConfigurations0 E' Z# w: N0 L1 y) ? S' W
- 2 W- u- h8 D3 \$ G
- PtConfigs.Add "PDF", False* ?3 }# w6 F& X1 `( T8 A, ~0 w# e
- Set PlotConfig = PtConfigs.Item("PDF")
$ z2 M$ [2 s; u+ t - PlotConfig.StandardScale = acScaleToFit( u6 Y& n3 ~. b& k! {6 M# k8 i
- , M v! }9 S3 K1 N$ _' _
- PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"% ^% }6 o' L( A$ ]. D& K+ d2 v* G
- 'ANSI_A_(8.50_x_11.00_Inches)
& D ?0 ]) u# i6 D& U& |6 c - PlotConfig.RefreshPlotDeviceInfo7 k$ s+ E' p6 G4 o7 @( P
! \# x* }7 j* w) ?. V- Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet
& r5 z: ]% _5 T1 [" {' R - Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
: `5 T! W' U/ `6 s* p7 } -
/ R* N4 @* s5 i1 F. P - acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式
0 S0 m) }% G a' r3 b7 D! s - " a, c( x+ H" q2 I/ G
- '使用图形文件的线宽
, z# v0 W- K2 g - PlotConfig.PlotWithLineweights = True8 |. y- a1 ?% B7 T1 j! Y& y6 \5 f
- '是否启用打印样式
5 k& e: V; s; _$ h e) U - PlotConfig.PlotWithPlotStyles = True
! [8 o& Y8 w" |( W3 e - 6 u6 E/ R- l$ H9 M
- '宽高基数
# v1 t' y& h* n* A% y2 j A! Z# r - Dim width, height As Double
; Y! ]$ s! C. R ]4 X! O - If blockRef.Name = "ACE A3块" Then
1 h5 o: [) |! g% g - width = 420- J5 ?% D1 t+ Z. J
- height = 297! k8 z$ B+ F: l8 W& A; L
- acadDoc.ActiveLayout.PlotRotation = ac90degrees
/ T9 P2 u3 e, a2 F$ J2 p - acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"
' F$ g7 F+ z' Y ?1 G6 [7 Q - ElseIf blockRef.Name = "ACE A4块" Then
: y |4 W U' y: P) R - width = 210
0 N2 b6 b0 ], [# Y - height = 297
8 O( w. ~# g$ ?$ D0 P! K9 p2 o - acadDoc.ActiveLayout.PlotRotation = ac0degrees
& m1 L a- c7 E) k+ w+ p1 u - acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"
+ {2 q4 P# N- j2 F7 u N9 [ - End If; J+ x5 u% Z6 H8 m. Z0 Q" b, a
-
" E& o6 ]! q9 \/ [3 q, L - '打印区域
% I+ a$ r. F8 C$ ? - Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double ^) i) S2 g0 K2 k2 Z _2 O: _" W
- LowerLeft(0) = insertPoint(0)
; S& D$ v, n( V5 c: c. g - LowerLeft(1) = insertPoint(1)6 A$ C$ ^+ C1 H; t$ T& [) c
- UpperRight(0) = insertPoint(0) + width * xScale8 \5 ], A' ?: f
- UpperRight(1) = insertPoint(1) + height * yScale
+ S1 ~7 _" z h7 G - ) F7 |4 f* N* b+ l! j
- '设置定义要打印的布局范围的坐标8 i8 J$ y6 A/ u/ X& D
- acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight
1 `8 h: j' x& {( }1 g9 A - '指定布局或打印配置的类型
8 g+ r4 `3 _5 C - acadDoc.ActiveLayout.PlotType = acExtents
7 D" D" A9 J+ ]" c" D: T n v - 5 c: @' y0 e! T ^- J' S
- BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT"): i8 N$ n- M% Y* H$ I, z3 a
- acadDoc.SetVariable "BACKGROUNDPLOT", 0
1 A' |; Z3 r* z5 B3 b9 i0 r - PlotConfig.RefreshPlotDeviceInfo
* T+ l; {% u9 d2 M -
1 V6 o# F5 n5 Z7 C1 @. w - Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet5 H( d; f9 t$ l% Q. h
- Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
9 f z, T/ S x$ D3 r9 T - Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
8 i3 y4 C5 d- X6 I/ I; Q, e - Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName
S1 W# t! p) \ d3 ]4 v - ( c3 u. Z0 [9 n4 K
- strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")
4 d- u4 ~) [9 A! x5 Y* ^ - Debug.Print "输出位置:" & strPdfFile, C! F! @1 ~, b; D' \+ ^, Z
- 2 P0 ]. s# l* f$ p! Z
- 'Now you can use the PlotTofile method1 W/ p/ a) z: f4 F" o3 i' z0 U
- If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then! j) `- E7 M2 q" E2 p
- Debug.Print "PDF Was Created"
. q( p' {* T8 g - Debug.Print "PDF Was Created"( H3 n) U$ y1 u
- Else
0 @, M0 _0 D, O8 O4 b. W - Debug.Print "PDF Creation Unsuccessful!"7 O2 s& l2 I7 B4 H! z, ?
- Debug.Print "PDF Creation Unsuccessful!"4 L9 K, m. g1 p$ s1 W
- End If
- d M7 T h$ C2 T* K4 p9 p* ^ - PtConfigs.Item("PDF").Delete. U$ U [, b7 j e- v- Z
- Set PlotConfig = Nothing
' q0 Z/ U2 h% _. B9 p - acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot
o! B3 J3 E. Q M - 3 _4 m. p3 y0 c: C
- Debug.Print "CreatePDF ok!"
( L- A7 c8 @: V) M$ q - End If" ~' ^ x1 n% P
- End If! K. y5 p- O1 e5 ?. f
- DoEvents
3 M( P9 q, G& j& B - Next ent, Y2 d9 S7 c0 }7 H
- Debug.Print "CreatePDF -------------------------------------------------<"
6 s7 L* e& b' D6 U' `+ z* r - Exit Function: c. _8 S7 N+ e9 A! _$ b
- " z+ E. @; ^5 H* v" ?5 B1 v6 }2 O
- ErrExit:5 D5 p" r+ C; l! X B, [. ]' `
- CreatePDF2 = -1# q7 a1 k% r( R
- Debug.Print "CreatePDF Error:" & Err.Description
+ s9 ]# T9 R. k- M - MsgBox "CreatePDF error:" & Err.Description+ E d! o0 c7 {7 s; L5 @0 g5 z( O
- End Function
复制代码 |
-
|