Skip to content

Commit 5f68619

Browse files
committed
init project
0 parents  commit 5f68619

7 files changed

+4361
-0
lines changed

.babelrc

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"presets": ["@babel/preset-env", "@babel/preset-react"]
3+
}

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
*.pdf
2+
dist
3+
node_modules

package.json

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "poc-reactpdf",
3+
"version": "1.0.0",
4+
"description": "Small example using react-pdf.org",
5+
"main": "index.js",
6+
"author": "mlecoq",
7+
"license": "MIT",
8+
"scripts": {
9+
"start": "webpack --config ./webpack.config.js --mode development && node dist/bundle"
10+
},
11+
"dependencies": {
12+
"@react-pdf/renderer": "^1.4.0",
13+
"react": "^16.8.4"
14+
},
15+
"devDependencies": {
16+
"@babel/core": "^7.3.4",
17+
"@babel/preset-env": "^7.3.4",
18+
"@babel/preset-react": "^7.0.0",
19+
"babel-loader": "^8.0.5",
20+
"webpack": "^4.29.6",
21+
"webpack-cli": "^3.2.3",
22+
"webpack-node-externals": "^1.7.2"
23+
}
24+
}

src/document.js

+112
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
import React from "react";
2+
import {
3+
Page,
4+
Text,
5+
View,
6+
Document,
7+
StyleSheet,
8+
Image
9+
} from "@react-pdf/renderer";
10+
11+
// Create styles
12+
const styles = StyleSheet.create({
13+
page: {
14+
flexDirection: "column",
15+
backgroundColor: "#E4E4E4",
16+
padding: 10
17+
},
18+
section: {
19+
margin: 10,
20+
padding: 10,
21+
flexGrow: 1
22+
},
23+
header: {
24+
width: "100%",
25+
borderBottom: "1 solid black"
26+
},
27+
images: {
28+
maxWidth: "100%",
29+
maxHeight: "100%"
30+
},
31+
imageContainer: {
32+
width: 100,
33+
height: 100
34+
},
35+
imageSection: {
36+
border: "1 solid black",
37+
padding: 5,
38+
maxWidth: "100%"
39+
},
40+
description: {
41+
fontSize: 7,
42+
marginLeft: 5,
43+
width: "60%"
44+
},
45+
details: {
46+
flexDirection: "row",
47+
maxWidth: "100%"
48+
}
49+
});
50+
51+
const n = 20;
52+
53+
// Create Document Component
54+
const MyDocument = () => (
55+
<Document>
56+
<Page size="A4" style={styles.page}>
57+
<View style={styles.header}>
58+
<Text>Visite</Text>
59+
</View>
60+
<View style={styles.section}>
61+
<View style={styles.main}>
62+
<Text>Infos</Text>
63+
{[...Array(n)].map((e, i) => (
64+
<View key={i} style={styles.imageSection} wrap={false}>
65+
<Text>Title</Text>
66+
67+
<View style={styles.details}>
68+
<View style={styles.imageContainer}>
69+
<Image
70+
style={styles.image}
71+
src="http://www.chien.nozamis.com/im-races/img-37-1.jpg"
72+
/>
73+
</View>
74+
75+
<View>
76+
<Text style={styles.description}>
77+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
78+
Suspendisse tristique vitae mi et aliquet. Nulla eget
79+
porttitor ligula. Curabitur porta diam in ligula finibus
80+
iaculis. Morbi tellus neque, scelerisque vitae lobortis eu,
81+
aliquet et dolor. Fusce nulla mi, porttitor semper euismod
82+
vel, accumsan id turpis. Nunc vel dolor ut sapien faucibus
83+
commodo a facilisis libero. Nam id diam eget risus pharetra
84+
iaculis ac at libero. Donec nunc tortor, faucibus et erat
85+
quis, consectetur ultrices eros. Aliquam commodo aliquet
86+
sagittis. Vivamus semper purus at sem faucibus, ac venenatis
87+
mi semper. Etiam leo libero, mattis ac ultrices vel, semper
88+
eu quam. Ut in urna pharetra, placerat metus vel, aliquam
89+
est. Mauris pellentesque mauris ipsum, in fermentum nunc
90+
placerat vitae. Integer elementum lorem eget arcu porttitor,
91+
id malesuada elit aliquam. Morbi non auctor lorem. Proin
92+
sapien orci, pretium in dolor at, porttitor tempor ante.
93+
Curabitur nec bibendum tortor. Maecenas vel tortor erat.
94+
Maecenas nec turpis mi. Aliquam tincidunt dictum diam in
95+
pharetra. In id mi dictum, vehicula est vel, gravida nulla.
96+
Duis consectetur blandit imperdiet. Donec est quam,
97+
venenatis eget eros et, pretium iaculis velit. Morbi nisi
98+
tellus, fringilla sed eleifend in, aliquet et metus. Donec
99+
eget tristique velit. Quisque sollicitudin et justo ut
100+
euismod. Duis vitae sapien vel dui consequat porta.
101+
</Text>
102+
</View>
103+
</View>
104+
</View>
105+
))}
106+
</View>
107+
</View>
108+
</Page>
109+
</Document>
110+
);
111+
112+
export default MyDocument;

src/index.js

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import React from "react";
2+
import ReactPDF from "@react-pdf/renderer";
3+
import MyDocument from "./document";
4+
5+
ReactPDF.render(<MyDocument />, `${__dirname}/../pdf/example.pdf`);

webpack.config.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
module.exports = {
2+
entry: "./src/index.js",
3+
module: {
4+
rules: [
5+
{
6+
test: /\.(js|jsx)$/,
7+
exclude: /node_modules/,
8+
use: ["babel-loader"]
9+
}
10+
]
11+
},
12+
resolve: {
13+
extensions: ["*", ".js", ".jsx"]
14+
},
15+
target: "node",
16+
output: {
17+
path: __dirname + "/dist",
18+
publicPath: "/",
19+
filename: "bundle.js"
20+
},
21+
node: {
22+
__dirname: true
23+
}
24+
};

0 commit comments

Comments
 (0)