GcExcel(.NET Core 및 Java)로 PDF 양식 생성
페이지 정보
작성자 GrapeCity 작성일 2021-01-28 15:33 조회 2,498회 댓글 0건본문
관련링크
PDF 양식은 다양한 플랫폼에서 다양한 클라이언트 측 도구를 사용해 문서를 열고 양식 필드에 입력한 다음, 파일에 포함된 양식 필드 값과 함께 새 PDF 문서로 저장하는 사용자에게 이식 가능한 크로스 플랫폼 문서를 전송하는 데 매우 유용합니다.
이 파일은 양식을 처리해야 하는 모든 사용자에게 반환되거나 전달되고, 자동화된 도구는 이 파일에서 양식 필드를 쉽게 추출합니다. 이것은 설문조사 및 질문지, 기록 배포나 보험 용도의 의료 양식, 법률 및 세무 양식 등 다양한 양식을 위한 일반적인 사용 사례입니다.
이제 GrapeCity Documents for Excel을 통해 Excel 템플릿 스프레드시트 문서에서 풍부하고 복잡한 PDF 양식을 쉽게 만들 수 있습니다. Excel 템플릿 워크시트의 양식 레이아웃과 문서에 PDF 양식 필드가 있는 셀의 특수 템플릿 구문을 활용해 PDF 양식을 쉽게 만들 수 있습니다.
이 구문은 풍부하고 유용하며, 여러 개의 이벤트 처리기를 비롯한 수많은 PDF 양식 필드를 지원합니다. 이 처리기에는 을 사용해 연결된 JavaScript 작업이 있습니다.
PDF 필드의 JSON 구문
GrapeCity Documents for Excel은 새로운 양식 속성을 지원하는 Excel 템플릿 워크시트의 콧수염 구문을 사용해 PDF 양식 필드를 지정합니다. PDF 양식 필드 속성은 표준 JSON 구문을 사용해 지정되며 JavaScript 코드의 코드 조각을 포함할 수 있습니다.
다음은 새로운 PDF 양식 필드 구문의 몇 가지 예시입니다.
{{ds1.Team(R=B6:F7, form={"type": "checkbox", "name": "teams","font":{"size":10, "color": "#ffff00", "bold": true}, "checkstyle": "Circle"})}}
{{ds1.Name(form={"type": "textbox", "name": "username", "value": "Input your name!","font":{"size":15, "color": "#ff0000", "bold": true}, "required": true})}}
{{(form={"type": "listbox", "name": "cities", "value": ["Xi'An", "BeiJing"],"font":{"size":11, "color": "#ff00ff", "bold": true}, "required": true})}}
{{(form={"type": "combobox", "name": "dates", "value": ["2019", "2020", "2021", "2022"],"font":{"size":11, "color": "#ff00ff", "bold": true}, "required": true})}}
예시 1에서는 크기가 10이고 노란 색상의 굵은 텍스트인 글꼴을 사용해 원 스타일 checkbox의 체크스타일로 teams라는 checkbox 필드를 지정합니다.
예시 2에서는 크기가 15이고 빨간 색상의 굵은 텍스트인 글꼴을 사용해 "Input your name!" 값과 함께 username이라는 textbox 필드를 양식에서 필수인 필드로 지정합니다.
예시 3에서는 크기가 11인 자홍 색상의 굵은 텍스트인 글꼴을 사용해 ["Xi'An", "BeiJing"]이라는 JavaScript 문자열 배열을 표시하는 값과 함께 cities라는 listbox 필드를 양식에서 필수인 필드로 지정합니다.
예시 4에서는 크기가 11인 자홍 색상의 굵은 텍스트인 글꼴을 사용해 2019-2022 연도를 나열하는 JavaScript 문자열 배열을 표시하는 값과 함께 dates라는 combobox 필드를 양식에서 필수인 필드로 지정합니다.
일반적인 PDF 양식 필드 속성
위 예시에 나와 있는 것처럼 모든 PDF 양식 필드 형식에 적용할 수 있는 다양한 PDF 양식 필드 속성이 있습니다. 아래 표에서 설명하는 이름이 지정된 식별자는 대소문자를 구분합니다.
참고: 아래 표는 에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.
이름 | 설명 |
type | 필드의 형식을 나타냅니다. |
alternateName | 필드에 커서를 가져가면 양식 필드에 어떻게 입력할지 망설이는 사용자에게 유용한 도구 설명 텍스트를 표시합니다. |
backgroundcolor | 필드의 배경색을 지정합니다. |
border | 필드를 둘러싸는 테두리를 지정합니다. |
font | 필드의 글꼴을 지정합니다. |
locked | 사용자가 필드의 속성을 변경할 수 있는지 여부를 나타냅니다. |
Name | 필드의 고유한 이름을 나타냅니다. |
readOnly | 사용자가 필드의 값을 변경할 수 있는지 여부를 나타냅니다. |
required | 처리할 양식에 대한 값이 필드에 있어야 하는지 여부를 나타냅니다. |
printed | (사용자가 인쇄를 선택하면) 지정된 필드가 문서의 다른 모든 필드와 함께 인쇄되는지 여부를 나타냅니다. |
hidden | 필드를 화면에 표시할지 여부를 나타냅니다. |
mouseUp | 필드의 활성 영역에서 마우스 버튼을 놓으면 순차적으로 수행될 작업을 나타냅니다. |
mouseDown | 필드의 활성 영역에서 마우스 버튼을 누르면 순차적으로 수행될 작업을 나타냅니다. |
mouseEnter | 마우스 버튼이 필드의 활성 영역에 들어가면 순차적으로 수행될 작업을 나타냅니다. |
mouseExit | 마우스 버튼이 필드의 활성 영역에서 나오면 순차적으로 수행될 작업을 나타냅니다. |
onFocus | 주석이 입력 포커스를 수신하면 순차적으로 수행될 작업을 나타냅니다. |
onBlur | 주석이 입력 포커스를 상실하면 순차적으로 수행될 작업을 나타냅니다. |
format | 현재 값을 표시하도록 필드 형식이 지정되기 전에 수행할 JavaScript 작업을 나타냅니다. 이 작업에서는 형식을 지정하기 전에 필드의 값을 수정할 수 있습니다. |
validate | 필드 값이 변경되면 수행될 JavaScript 작업을 나타냅니다. 이 작업에서는 새 값의 유효성을 검사할 수 있습니다. |
calculate | 다른 필드의 값이 변경되면 이 필드의 값을 다시 계산하기 위해 수행될 JavaScript 작업을 나타냅니다. |
keystroke | 사용자가 텍스트 필드나 combobox에 키를 입력하거나 스크롤 가능 listbox에서 선택한 값을 수정하면 수행될 JavaScript 작업을 나타냅니다. 이 작업에서는 키 입력의 유효성을 검사하여 키 입력을 거부하거나 수정할 수 있습니다. |
동작 JSON 개체
위의 이벤트 처리기 속성 중 다수는 특수 동작 JSON 개체를 사용해 복잡한 반응형 및 동적 양식을 만들 수 있도록 지원하는 동작을 지정합니다.
지정된 JavaScript는 이스케이프된 문자를 사용해 따옴표, 라인 피드, 캐리지 리턴, JSON에 포함될 때 이스케이프가 필요한 기타 문자를 포함해야 합니다. 동작 JSON 개체에는 다음과 같은 속성이 있습니다(대소문자를 구분하지 않음).
참고: 아래 표는 에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.
이름 | 설명 |
script | 스크립트가 JavaScript 인터프리터로 컴파일되고 실행되게 하는 작업을 나타냅니다. |
submit | 선택한 대화형 양식 필드의 이름 및 값을 지정된 URL(Uniform Resource Locator)로 전송하는 작업을 나타냅니다. 이 URL은 이름과 값을 처리하여 응답을 전송할 웹 서버의 주소일 수 있습니다. |
reset | 재설정 작업에 포함하거나 작업에서 제거할 필드 이름을 설명하는 JSON 개체입니다. |
형식별 PDF 양식 필드 속성
일부 PDF 양식 필드 속성은 특정 PDF 양식 필드 형식에만 적용할 수 있습니다. 다음 표에는 각 PDF 양식 필드 형식에 사용할 수 있는 속성이 나열되어 있습니다.
checkbox별 설정
참고: 아래 표는 에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.
이름 | 설명 |
checkStyle | 체크 표시의 스타일입니다. |
value | 이 값이 없으면 GcExcel이 셀의 값을 부울로 자동 변환한 다음, 템플릿 처리 후 이 속성으로 설정합니다. |
defaultValue | 사용자가 처음 양식을 열었을 때 checkbox가 선택되어 있게 할지 여부를 나타내는 값입니다. |
참고: 아래 표는 에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.
이름 | 설명 |
value | textbox에 표시할 값입니다. |
defaultValue | 사용자가 처음 양식을 열면 textbox에 표시할 기본값입니다. |
combo | 포인팅 장치로 선택한 후 바로 새 값이 커밋되는지 여부를 나타냅니다. |
password | 필드가 화면에 표시되지 않아야 하는 보안 암호를 입력하기 위한 것인지 여부를 나타냅니다. |
spellcheck | 필드에 입력된 텍스트의 맞춤법을 검사할지 여부를 나타냅니다. |
scrollable | 필드를 스크롤하여 주석 직사각형에 맞는 텍스트보다 더 많은 텍스트를 채울 수 있는지 여부를 나타냅니다. |
maxLen | 문자로 표시되는 필드 텍스트의 최대 길이입니다. |
multiline | 필드에 여러 줄의 텍스트를 포함할 수 있는지 여부를 나타냅니다. |
justification | 필드의 텍스트를 표시하는 데 사용될 양쪽 맞춤입니다. |
listbox별 설정
참고: 아래 표는 에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.
이름 | 설명 |
value | listbox에 표시될 항목의 목록입니다. |
commitOnSelChange | 포인팅 장치로 선택한 후 바로 새 값이 커밋되는지 여부를 나타냅니다. |
selectedIndex | 선택한 항목의 인덱스입니다(한 개의 항목을 선택한 경우). |
sort | 필드의 옵션 항목이 알파벳순으로 정렬되어야 하는지 여부를 나타냅니다. |
selectedIndexes | 선택한 항목의 인덱스입니다(두 개 이상의 항목을 선택한 경우). |
multiSelect | 두 개 이상의 옵션 항목을 동시에 선택할 수 있는지 여부를 나타냅니다. |
exportValue | 이 listbox 필드의 내보내기 값입니다. |
combobox별 설정
참고: 아래 표는 에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.
이름 | 설명 |
value | combobox에 표시될 항목의 목록입니다. |
commitOnSelChange | 포인팅 장치로 선택한 후 바로 새 값이 커밋되는지 여부를 나타냅니다. |
selectedIndex | 선택한 항목의 인덱스입니다. |
sort | 필드의 옵션 항목이 알파벳순으로 정렬되어야 하는지 여부를 나타냅니다. |
spellCheck | 필드에 입력된 텍스트의 맞춤법을 검사할지 여부를 나타냅니다. |
editable | combobox에 드롭다운 목록뿐 아니라 편집 가능한 textbox도 포함되는지 여부를 나타냅니다. |
exportValue | 이 combobox 필드의 내보내기 값입니다. |
라디오 버튼별 설정
참고: 아래 표는 에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.
이름 | 설명 |
checkStyle | 체크 표시의 스타일입니다. |
groupName | 라디오 버튼 그룹의 이름입니다. 그룹 이름이 동일한 라디오 버튼은 동일한 그룹에 추가됩니다. 이 값이 없으면 GcExcel은 동일한 템플릿 셀에서 확장된 라디오 버튼을 템플릿 처리 후 동일한 그룹에 자동으로 추가합니다. |
radiosInUnison | 켜짐 상태에 동일한 값을 사용하는 라디오 버튼 필드 내 라디오 버튼 그룹이 동시에 켜지고 꺼지는지 여부, 즉 하나를 선택하면 모두 선택되는지 여부를 나타냅니다. 선택을 취소하면 버튼은 상호 배타적입니다(HTML 라디오 버튼과 동일한 동작). |
checkedChoice | 옵션이 선택된 값을 나타냅니다. |
defaultCheckedChoice | 사용자가 양식을 처음 열 때 선택되는 옵션 값을 나타냅니다. |
groupName이 동일한 라디오 버튼은 동일한 그룹에 속합니다. RadiosInUnison, checkedChoice, defaultCheckedChoice: 이 세 가지 설정은 라디오 버튼 그룹에 속하며, 이 설정의 값은 마지막으로 지정된 값을 기준으로 합니다.
푸시 버튼별 설정:
참고: 아래 표는 에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.
이름 | 설명 |
highlighting | 주석의 강조 표시 모드를 나타냅니다. |
caption | 버튼의 캡션을 나타냅니다. |
image | 버튼의 이미지를 나타냅니다. |
captionImageRelation | 이미지를 기준으로 버튼의 캡션을 배치하는 방법을 나타냅니다. |
downCaption | 사용자가 버튼을 누를 때 버튼의 캡션을 나타냅니다. |
downImage | 사용자가 버튼을 누를 때 버튼의 이미지를 나타냅니다. |
rolloverCaption | 사용자가 마우스 버튼을 누르지 않고 커서를 활성 영역으로 이동할 때 버튼의 캡션을 나타냅니다. |
rolloverImage | 사용자가 마우스 버튼을 누르지 않고 커서를 활성 영역으로 이동할 때 버튼의 이미지를 나타냅니다. |
imageScale | 이미지 배율을 나타냅니다. |
서명별 설정
참고: 아래 표는 에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.
이름 | 설명 |
lockType | 잠긴 필드의 형식을 나타냅니다. |
fieldNames | lockType 속성에 따라 처리에 포함하거나 처리에서 제외해야 할 필드 이름의 목록을 나타냅니다. |
LockedFields | SignatureFormField에 서명이 되면 필드를 잠글지 여부를 나타냅니다. |
Excel 템플릿에서 데이터 바인딩을 사용하면 데이터 소스를 사용해 PDF 양식 필드에 값을 지정할 수도 있습니다. 모든 은 새로운 PDF 양식 필드에서 작동하며 PDF 양식 필드 셀에서 초기 값을 지정할 수 있습니다. 한 가지 예시는 다음과 같이 주소록을 만드는 textbox 필드에 대한 새로운 데모 샘플에 포함되어 있습니다.
그림 1 - 주소록을 위한 textbox PDF 양식 필드 샘플 Excel 템플릿:
이 샘플에서는 데이터 바인딩 기능을 사용해 표의 셀에 값을 채웁니다. 또한 textbox PDF 양식 필드를 사용해 PDF의 값을 편집할 수 있습니다. 관련 코드는 다음과 같습니다.
NET C# 코드
//create a new workbook var workbook = new GrapeCity.Documents.Excel.Workbook(); //Load template file from resource var templateFile = this.GetResourceStream("xlsx\\Template_TextFields.xlsx"); workbook.Open(templateFile); #region Init Data var datasource = new DataTable(); datasource.Columns.Add(new DataColumn("Name", typeof(string))); datasource.Columns.Add(new DataColumn("Work", typeof(string))); datasource.Columns.Add(new DataColumn("Cell", typeof(string))); datasource.Columns.Add(new DataColumn("Home", typeof(string))); datasource.Columns.Add(new DataColumn("Email", typeof(string))); datasource.Columns.Add(new DataColumn("Birthday", typeof(string))); datasource.Columns.Add(new DataColumn("Address", typeof(string))); datasource.Columns.Add(new DataColumn("City", typeof(string))); datasource.Columns.Add(new DataColumn("State", typeof(string))); datasource.Columns.Add(new DataColumn("Zip", typeof(string))); datasource.Rows.Add("Kim Abercrombie", "1235550123", "1235550123", "1235550123", "Kim@example.com", "4/13/1991", "123 N. Maple", "Cherryville", "WA", "98031"); datasource.Rows.Add("John Smith", "3215230123", "3215230123", "3215230123", "John@example.com", "5/20/1990", "4456 E. Aspen", "Montgomery", "AL", "36136"); datasource.Rows.Add("James Williams", "5235550879", "5235550879", "5235550879", "James@example.com", "4/5/1995", "123 N. Maple", "Denver", "CO", "80214"); datasource.Rows.Add("Mark Jordan", "1238640185", "1238640185", "1238640185", "Mark@example.com", "12/13/1988", "123 N. Maple", "Boise", "ID", "83706"); datasource.Rows.Add("Andrew Lepp", "6235320178", "6235320178", "6235320178", "Andrew@example.com", "10/9/1996", "123 N. Maple", "Augusta", "ME", "04336"); #endregion //Add data source workbook.AddDataSource("ds", datasource); //Invoke to process the template workbook.ProcessTemplate(); //save to a pdf file workbook.Save("textfields.pdf");
.NET VB 코드
' Create a new Workbook Dim workbook As New Workbook 'Load template file from resource Dim templateFile = GetResourceStream("xlsx\Template_TextFields.xlsx") workbook.Open(templateFile) #Region "Init Data" Dim datasource As New DataTable With datasource.Columns .Add(New DataColumn("Name", GetType(String))) .Add(New DataColumn("Work", GetType(String))) .Add(New DataColumn("Cell", GetType(String))) .Add(New DataColumn("Home", GetType(String))) .Add(New DataColumn("Email", GetType(String))) .Add(New DataColumn("Birthday", GetType(String))) .Add(New DataColumn("Address", GetType(String))) .Add(New DataColumn("City", GetType(String))) .Add(New DataColumn("State", GetType(String))) .Add(New DataColumn("Zip", GetType(String))) End With With datasource.Rows .Add("Kim Abercrombie", "1235550123", "1235550123", "1235550123", "Kim@example.com", "4/13/1991", "123 N. Maple", "Cherryville", "WA", "98031") .Add("John Smith", "3215230123", "3215230123", "3215230123", "John@example.com", "5/20/1990", "4456 E. Aspen", "Montgomery", "AL", "36136") .Add("James Williams", "5235550879", "5235550879", "5235550879", "James@example.com", "4/5/1995", "123 N. Maple", "Denver", "CO", "80214") .Add("Mark Jordan", "1238640185", "1238640185", "1238640185", "Mark@example.com", "12/13/1988", "123 N. Maple", "Boise", "ID", "83706") .Add("Andrew Lepp", "6235320178", "6235320178", "6235320178", "Andrew@example.com", "10/9/1996", "123 N. Maple", "Augusta", "ME", "04336") End With #End Region 'Add data source workbook.AddDataSource("ds", datasource) 'Invoke to process the template workbook.ProcessTemplate() ' save to a pdf file workbook.Save("textfields.pdf")
Java 코드
//create a new workbook Workbook workbook = new Workbook(); // Load template file from resource InputStream templateFile = this.getResourceStream("xlsx/Template_TextFields.xlsx"); workbook.open(templateFile); // #region Init Data List<AddressBook> addressBooks = new ArrayList<AddressBook>(); AddressBook addressBook1 = new AddressBook(); addressBook1.name = "Kim Abercrombie"; addressBook1.work = "1235550123"; addressBook1.cell = "1235550123"; addressBook1.home = "1235550123"; addressBook1.email = "Kim@example.com"; addressBook1.birthday = "4/13/1991"; addressBook1.address = "123 N. Maple"; addressBook1.city = "Cherryville"; addressBook1.state = "WA"; addressBook1.zip = "98031"; addressBooks.add(addressBook1); AddressBook addressBook2 = new AddressBook(); addressBook2.name = "John Smith"; addressBook2.work = "3215230123"; addressBook2.cell = "3215230123"; addressBook2.home = "3215230123"; addressBook2.email = "John@example.com"; addressBook2.birthday = "5/20/1990"; addressBook2.address = "4456 E. Aspen"; addressBook2.city = "Montgomery"; addressBook2.state = "AL"; addressBook2.zip = "36136"; addressBooks.add(addressBook2); AddressBook addressBook3 = new AddressBook(); addressBook3.name = "James Williams"; addressBook3.work = "5235550879"; addressBook3.cell = "5235550879"; addressBook3.home = "5235550879"; addressBook3.email = "James@example.com"; addressBook3.birthday = "4/5/1995"; addressBook3.address = "123 N. Maple"; addressBook3.city = "Denver"; addressBook3.state = "CO"; addressBook3.zip = "80214"; addressBooks.add(addressBook3); AddressBook addressBook4 = new AddressBook(); addressBook4.name = "Mark Jordan"; addressBook4.work = "1238640185"; addressBook4.cell = "1238640185"; addressBook4.home = "1238640185"; addressBook4.email = "Mark@example.com"; addressBook4.birthday = "12/13/1988"; addressBook4.address = "123 N. Maple"; addressBook4.city = "Boise"; addressBook4.state = "ID"; addressBook4.zip = "83706"; addressBooks.add(addressBook4); AddressBook addressBook5 = new AddressBook(); addressBook5.name = "Andrew Lepp"; addressBook5.work = "6235320178"; addressBook5.cell = "6235320178"; addressBook5.home = "6235320178"; addressBook5.email = "Andrew@example.com"; addressBook5.birthday = "10/9/1996"; addressBook5.address = "123 N. Maple"; addressBook5.city = "Augusta"; addressBook5.state = "ME"; addressBook5.zip = "04336"; addressBooks.add(addressBook5); // #endregion // Add data source workbook.addDataSource("ds", addressBooks); // Invoke to process the template workbook.processTemplate(); //save to an pdf file workbook.save("TextFields.pdf");
Kotlin 코드
//create a new workbook var workbook = Workbook() // Load template file from resource val templateFile = this.getResourceStream("xlsx/Template_TextFields.xlsx") workbook.open(templateFile) // #region Init Data val addressBooks = ArrayList<AddressBook>() val addressBook1 = AddressBook() addressBook1.name = "Kim Abercrombie" addressBook1.work = "1235550123" addressBook1.cell = "1235550123" addressBook1.home = "1235550123" addressBook1.email = "Kim@example.com" addressBook1.birthday = "4/13/1991" addressBook1.address = "123 N. Maple" addressBook1.city = "Cherryville" addressBook1.state = "WA" addressBook1.zip = "98031" addressBooks.add(addressBook1) val addressBook2 = AddressBook() addressBook2.name = "John Smith" addressBook2.work = "3215230123" addressBook2.cell = "3215230123" addressBook2.home = "3215230123" addressBook2.email = "John@example.com" addressBook2.birthday = "5/20/1990" addressBook2.address = "4456 E. Aspen" addressBook2.city = "Montgomery" addressBook2.state = "AL" addressBook2.zip = "36136" addressBooks.add(addressBook2) val addressBook3 = AddressBook() addressBook3.name = "James Williams" addressBook3.work = "5235550879" addressBook3.cell = "5235550879" addressBook3.home = "5235550879" addressBook3.email = "James@example.com" addressBook3.birthday = "4/5/1995" addressBook3.address = "123 N. Maple" addressBook3.city = "Denver" addressBook3.state = "CO" addressBook3.zip = "80214" addressBooks.add(addressBook3) val addressBook4 = AddressBook() addressBook4.name = "Mark Jordan" addressBook4.work = "1238640185" addressBook4.cell = "1238640185" addressBook4.home = "1238640185" addressBook4.email = "Mark@example.com" addressBook4.birthday = "12/13/1988" addressBook4.address = "123 N. Maple" addressBook4.city = "Boise" addressBook4.state = "ID" addressBook4.zip = "83706" addressBooks.add(addressBook4) val addressBook5 = AddressBook() addressBook5.name = "Andrew Lepp" addressBook5.work = "6235320178" addressBook5.cell = "6235320178" addressBook5.home = "6235320178" addressBook5.email = "Andrew@example.com" addressBook5.birthday = "10/9/1996" addressBook5.address = "123 N. Maple" addressBook5.city = "Augusta" addressBook5.state = "ME" addressBook5.zip = "04336" addressBooks.add(addressBook5) // #endregion // Add data source workbook.addDataSource("ds", addressBooks) // Invoke to process the template workbook.processTemplate() //save to an pdf file workbook.save("TextFields.pdf")
위 코드는 Excel 템플릿 통합 문서를 연 후 템플릿 셀에 바인딩할 주소 값이 포함된 데이터 소스를 만들어 추가하고, 끝으로 템플릿을 처리하고 PDF를 저장합니다.
그림 2 - GcPdfViewer에 표시된 편집 가능한 주소록 PDF 양식:
PDF 양식 필드용 포함된 글꼴
기본적으로 PDF 양식 필드에 지정된 글꼴은 PDF에 포함됩니다. 글꼴을 포함하면 사용자가 양식 필드에 자유롭게 입력할 수 있게 해주는 모든 글리프가 제공되며, 이 글리프를 통해 사용자의 입력을 렌더링할 수 있습니다.
하지만 전체 글꼴을 포함하면 파일 크기가 상당히 커질 수 있습니다.
특히 다양한 언어를 위한 여러 가지 문자 집합이 포함된 몇 가지 일반적인 유니코드와 아시아 글꼴의 경우 그렇습니다. 파일이 너무 커지지 않도록 하려면 글로벌 옵션인 TemplateOptions.EmbedFontForFormFields를 사용해 GrapeCity Documents for Excel v3.2로 만든 PDF 양식 필드에 대해 글꼴을 포함하고 싶지 않다고 Excel 템플릿에 명시하면 됩니다.
이 글로벌 옵션은 통합 문서 수준 이름을 사용해 Excel 템플릿 통합 문서에 지정됩니다.
NET C# 코드
//Init template global settings workbook.Names.Add("TemplateOptions.EmbedFontForFormFields", "false");
.NET VB 코드
//Init template global settings workbook.Names.Add("TemplateOptions.EmbedFontForFormFields", "false")
Java 코드
//Init template global settings workbook.getNames().add("TemplateOptions.EmbedFontForFormFields", "false");
Kotlin 코드
//Init template global settings workbook.getNames().add("TemplateOptions.EmbedFontForFormFields", "false")
예시 PDF 양식: 미국 세금 양식 W-4
그림 3 - 미국 세금 양식 W-4:
채울 수 있는 미국 세금 양식 W-4를 만드는 이 예시는 GrapeCity Documents for Excel v3.2용 새로운 데모 샘플(, )에서 찾을 수 있습니다.
이 예시에서는 위에 표시된 Excel 템플릿을 사용해 PDF 양식 필드를 만듭니다. 이 템플릿은 "템플릿 다운로드" 버튼을 사용해 데모(, )에서 다운로드할 수 있습니다.
콧수염 구문을 사용해 필드에 대한 속성을 지정하는 PDF 양식 필드 셀을 템플릿에서 볼 수 있습니다. 다음과 같이 B7 셀에 첫 번째 textbox PDF 양식 필드가 표시됩니다.
{{(form={"type": "textbox", "name": "First&Middle Name", "font":{"bold":true, "color": "#362EA2"}})}}
이것은 First&Middle Name이라는 textbox를 색상이 진한 파란색을 띤 보라색이고 텍스트가 굵게 표시된 글꼴로 지정합니다. 다른 textbox 필드는 Last Name의 경우 셀 I7, Social Security Number의 경우 O7, Address의 경우 B9, Address2(도시, 주, 우편번호)의 경우 B11에 표시됩니다.
이어서 셀 C12에는 다음과 같이 첫 번째 checkbox 필드가 표시됩니다.
{{(form={"type": "checkbox", "name": "Single","border": {"color": "#000000"}})}}이것은 테두리가 검은색인 Single이라는 checkbox를 지정합니다. C13(Married), C14(HouseHold), S23(TwoJobs) 셀에는 다른 checkbox 필드가 있습니다.
와 마찬가지로 이 예시에서는 서명 필드를 사용하지 않지만, 사용한다고 가정하면 셀 B46에 다음과 같이 지정됩니다.
{{(form={"type": "signature", "name": "Employee's Signature", "font":{"bold":true, "color": "#362EA2"}})}}
템플릿 스프레드시트에서 미국 W-4 세금 양식을 만들 수 있는 코드는 다음과 같습니다.
NET C# 코드
//create a new workbook var workbook = new GrapeCity.Documents.Excel.Workbook(); //Load template file from resource var templateFile = this.GetResourceStream("xlsx\\Template_fw4-USTaxForm.xlsx"); workbook.Open(templateFile); //Invoke to process the template workbook.ProcessTemplate(); //save to a pdf file workbook.Save("ustaxform_fw4.pdf");
.NET VB 코드
' Create a new Workbook Dim workbook As New Workbook 'Load template file from resource Dim templateFile = GetResourceStream("xlsx\Template_fw4-USTaxForm.xlsx") workbook.Open(templateFile) 'Invoke to process the template workbook.ProcessTemplate() ' save to a pdf file workbook.Save("ustaxform_fw4.pdf")
Java 코드
//create a new workbook Workbook workbook = new Workbook(); //Load template file from resource InputStream templateFile = this.getResourceStream("xlsx/Template_fw4-USTaxForm.xlsx"); workbook.open(templateFile); //Invoke to process the template workbook.processTemplate(); //save to an pdf file workbook.save("USTaxForm_fw4.pdf");
Kotlin 코드
//create a new workbook var workbook = Workbook() //Load template file from resource val templateFile = this.getResourceStream("xlsx/Template_fw4-USTaxForm.xlsx") workbook.open(templateFile) //Invoke to process the template workbook.processTemplate() //save to an pdf file workbook.save("USTaxForm_fw4.pdf")
그림 4 - GcPdfViewer에 표시된 미국 W-4 세금 양식:
이 데모 샘플은 .NET과 Java 버전용 Excel 데모를 위한 새로운 GrapeCity 문서인 및
댓글목록
등록된 댓글이 없습니다.