# Description
This pull request includes several changes aimed at improving the code
structure and removing redundant code. The most significant changes
involve reordering methods, removing unnecessary annotations, and
refactoring constructors to use dependency injection.
Autowired now comes via constructor (which also doesn't need autowired
annotation as its done by default for configuration)
## Checklist
- [ ] I have read the [Contribution
Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
- [ ] I have performed a self-review of my own code
- [ ] I have attached images of the change if it is UI based
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] If my code has heavily changed functionality I have updated
relevant docs on [Stirling-PDFs doc
repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/)
- [ ] My changes generate no new warnings
- [ ] I have read the section [Add New Translation
Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md#add-new-translation-tags)
(for new translation tags only)
* Add Tabula dependency and exclude slf4j-simple
- Add tabula-java dependency to extract tables into CSV.
- Exclude slf4j-simple due to Logback
* Add a flexible CSVWriter
- Add FlexibleCSVWriter which extends CSVWriter to pass a custom CSVFormat, as CSVWriter's parameterized constructor (that allows changing CSVFormat) is protected.
* Use Tabula in extracting tables from PDF
- Use Tabula in extracting tables from PDF instead of the existing implementation
* Delete PDFTableStripper as It is unneeded
- Delete PDFTableStripper as It is unneeded as Tabula-Java is used instead.
* Use correct class in ExtractCSVController logger
* Exclude gson and bcprov-jdk15on dependencies from tabula
- Exclude gson and bcprov-jdk15on from tabula-java due to detected security vulnerabilities.